處理器內核通常具有您所說的某種表的起始地址,或者是地址列表或者像ARM這樣的執行指令的地方。包裹在覈心內,但在芯片內可能會有所不同。不像8051,mips,arm,xscale等芯片供應商所特有的核心將會有更廣泛的不同答案。例如,一些微控制器供應商會研究帶狀引腳,並且如果釋放重置時帶子是以特定方式連接的,那麼它將從芯片內的特殊引導閃存執行,例如,您可以使用引導加載程序將用戶引導閃存編程爲。如果綁帶沒有按照某種方式綁定,那麼有時它會啓動您的用戶代碼。我知道的一個供應商仍然會啓動引導加載程序閃存,如果向量表具有有效的校驗和,那麼他們將跳轉到向量表中的復位向量,否則它們將處於引導加載程序模式,等待您與他們交談。
當你進入更大的處理器,非微控制器,那裏的軟件居住在處理器之外,或者在啓動閃存(與處理器分離的芯片)或某些在重置之前以某種方式管理的RAM等。規則爲核心,從地址0xFFFFFFF0開始或從地址0x00000000開始,如果存在垃圾,那麼很好地觸發未定義的指令向量,如果這是垃圾只是掛在那裏或坐在無限循環中調用未定義的指令向量。這適用於ARM,例如,您可以使用從工廠擦除的引導閃存(全部爲0xFF)構建一塊電路板,然後您可以使用jtag在第一次停止閃存並編程閃存,並且不必卸載或套接字或預編程任何東西。只要你的引導程序不掛在胳膊上,你就可以擁有一個不易碎的設計。 (實際上,你可以經常在復位時握住手臂,仍然可以使用jtag調試器進行操作,而不用擔心使用jtag引腳或懸掛手臂核心的錯誤代碼)。
簡答:有多少個不同的處理器芯片供應商?有許多不同的解決方案,儘可能多的你可以想到和更多的部署。儘管將重置處理程序地址放置在內存中的已知位置是最常見的。
編輯:
問題2和3,如果你是買一個芯片,一些微控制器有這種保護的引導程序,但即使有,通常你寫將由該產品所使用的啓動代碼。引導代碼的一部分是初始化堆棧指針和準備內存,並提出部分芯片和所有這些好東西。有時芯片供應商會提供例子。如果您購買的是板級產品,那麼您通常會找到一個板級支持包(BSP),它具有工作示例代碼來提供該板,並可能會執行一些操作。比如說Beagleboard,或者open-rd或embeddedarm.com帶有一個引導程序(u-boot或其他),一些已經預裝了linux。這樣的用戶通常只是編寫一些linux應用程序/驅動程序,並將它們添加到bsp中,但您並不侷限於此,通常歡迎您完全重寫並更換bootloader。無論誰編寫引導程序必須設置堆棧並啓動硬件等。
像gameboy advance或nds之類的系統,供應商有一些啓動代碼調用您的啓動代碼。所以他們可能會爲他們提供堆棧和設置,但他們正在交給你,系統的很多部分都可能啓動,你只需要決定如何分配存儲器,你想要的堆棧,數據,程序,等等。
一些供應商想要保持這種東西控制或祕密,其他人不。在某些情況下,您可能會得到一個沒有示例代碼的電路板或芯片,只是一些數據手冊和參考手冊。
如果你想進入這個業務,雖然你需要準備編寫這個啓動代碼(用匯編語言),可以調用一些C代碼來調出系統的其餘部分,那麼這可能會啓動主要操作系統或應用程序或其他。 Microcotrollers聽起來像你在玩什麼,你的問題的答案在芯片供應商用戶指南,一些供應商比其他廠商更好。搜索文檔中的重置或啓動字以嘗試找出它們的啓動方案。我建議你使用「美元票」來選擇更好的供應商。如果供應商的文檔不完整,祕密文檔,支持不好,不要向他們提供您的資金,請將資金花費在供應商可自由下載,寫得很好的文檔上,並提供書面例子和用戶論壇,全職員工可以圍繞回答問題進行調查。有些時候文檔不可用,除非是認真付費的客戶,這取決於市場。儘管大多數通用嵌入式系統都是公開記錄的。質量差別很大,但文檔等在那裏。
你想使用特定的芯片或主板?你能指定那個芯片或電路板嗎? –