2012-11-27 47 views

回答

5

不知道你到底在想什麼。重置可以用於許多不同的方式和地點。而且通常沒有規定何時何地可以使用它們的規則。

相對於電流流過電路的速度,從電源「開啓」到電壓和電流已穩定在可用且穩定狀態的時間需要相當長的時間,以便邏輯可以開始。驅動一次供電邏輯的時鐘或振盪器需要時間來解決。使用某種時鐘倍頻器的芯片。例如,你的多千兆赫茲處理器通常跑掉100Mhz振盪器,並從芯片內部增加。該電路需要一段時間才能鎖定振盪器時鐘,然後生成其倍頻時鐘。因此,您經常會看到全局重置,無需啓動芯片就可以啓動並運行邏輯,直到事情足夠穩定以便它們可以運行爲止。這可以被稱爲上電覆位。一些電路用於在通電後的一段時間內將芯片的其餘部分保持在復位狀態。有很多不同的方法來做到這一點。

通常你的上電覆位用於板上的所有邏輯,有時每個芯片都有自己獨立的上電覆位電路,當然有些系統是這兩個極端的混合。您可能會調用與系統復位時板上大部分邏輯關聯的重置。導致整個系統不僅僅是其中的一部分,而是被重置和/或釋放。

有時你會看到芯片允許軟件閃爍全局重置,再次有很多不同的方法來做到這一點。你必須避免明顯的雞和雞蛋問題。如果軟件通過聲明覆位來對復位線進行開關控制,則會導致處理器以及軟件本身進入復位狀態,從而防止導致復位被釋放。因此,一些未通過重置復位的硬件被賦予命令以保持一段時間的復位然後釋放它。或者有時候系統工作的方式,軟件可能會導致兩個寫入在第一個寫入到達之前發出,一個發出重置對方釋放它(這將是硬件設計不良的軟件破解)。有人可能會說這是一個溫暖的重置,因爲功率已經穩定,振盪器穩定等等,但由於某種原因或其他原因,希望將邏輯置於已知狀態。

系統設計可以爲軟件提供執行系統範圍重置的能力,或者僅提供系統的一小部分,或者可能只提供運行軟件的處理器或其芯片。例如,您可以想象系統已啓動並運行該軟件已編程外設來執行某些操作,或者至少將其從其加電覆位狀態更改後,只能重置處理器,但外設沒有。這對於軟件來說可能是不可取的,因爲它必須從復位中解脫出來,並且可能必須弄清楚外設是否被重置或者處於未知狀態。當軟件啓動時,軟件設計可能無法假定外設處於已知的後置復位狀態。

這可以並確實得到進行到各種極端。時鐘邏輯消耗功率,如果您的SOC具有您未使用的外設,則可能會浪費功率計時邏輯,而該系統不會使用該邏輯。因此,一些系統被設計成具有系統的各個部分,或者甚至每個具有復位和時鐘的單獨外設,使得軟件能夠精確控制功耗和能夠容易地將芯片的一部分重置到已知狀態,更容易使用這些外圍設備。通常用於以已知的方式啓動(嵌入式)系統。

冷是暖相反,冷啓動可以說「動力循環」的另一種方式。關閉電源(意味着電路/系統變冷),然後打開電源,以便所有東西都能從寒冷中恢復並再次穩定。熱復位不會影響整個系統的系統,但只有一部分可能會使用熱和冷的術語。理論上,溫暖的重置解決了一些崩潰,冷重置,理論上解決了更多的問題,因爲冷重置在理論上重置整個系統。但自然舉例來說,如果你有一臺掃描儀或者打印機,或者有自己的電源其他一些外圍設備,慣於一定能獲得由主計算機的冷復位重置,你需要的一切斷電,並把它帶回來了。有時系統設計成當主電腦暖機或冷機復位時,外圍設備將熱復位。

實在是沒有魔法吧,設計者覺得有必要有一個復位將有一個復位邏輯的任何塊,怎麼局部或全局的是復位,是設計的一部分。一個芯片可以被認爲與由單個函數調用和庫調用組成的軟件項目沒有區別。用於創建現代邏輯的編程語言非常非常相似,主要區別僅在於邏輯確實只在並行運行的軟件項目,軟件功能和通話功能等功能,和第二的邏輯功能,有時會有幾十到幾百的參數,其中代碼段線性執行的軟件和函數往往具有適度的調用次數。由於看起來像使用全局變量的項目似乎是可取的或不可取的,因此編程語言假定這些全局變量在程序啓動時具有一定的狀態。在main()發生時的C語言中,有語言規則可以告訴你所有全局變量的狀態,同樣,當你輸入一個函數時,你所有的本地變量的狀態。你可以想象你的代碼中的地方,其中單個全局變量重置爲已知狀態,x = 0; Y = 7;等等。後來他們的使用是基於先前的狀態x ++來確定的; Y- = Z;當你希望把一些東西放回到一個已知的狀態中時,邏輯就沒有什麼不同了,你提供了一個機制來做到這一點。如果你的代碼要在一個已知的狀態放回變量的大量這樣一個任務可以重新開始,說一個圖形程序完成了一個文件,無需退出程序要釋放所有它的分配的內存先前的圖像,灰色的菜單和按鈕,當沒有打開的圖像文件等時沒有意義。您可能有一個函數調用其他函數,導致發生重大清理。這與溫暖的重置不同。退出程序並再次啓動程序與冷重置不同。輸入main()時變量的狀態和調用函數時的局部變量的狀態是這些變量的上電覆位狀態。

+0

非常感謝詳細信息:-) –