連結器與載入器與執行檔格式
在沒有作業系統的微控制器上,通電後啟動程式碼在呼叫main之前所進行的處理,下列何者正確?
- A將.text的機器碼全部從RAM寫回快閃記憶體
- B讀出RAM的內容,還原上次斷電時的變數值
- C將.data的初始值從快閃記憶體複製到RAM,並將.bss的區域以0填滿
查看答案與解析
正確答案:C. 將.data的初始值從快閃記憶體複製到RAM,並將.bss的區域以0填滿
斷電後RAM的內容會消失,所以有初始值的變數之值要儲存在不會被改寫的快閃記憶體中,由啟動程式碼複製到RAM上該變數的位置。沒有初始值的變數區域(.bss)則以0填滿。在連結器腳本中,.data會分別指定「放在快閃記憶體的位址」與「執行時在RAM上使用的位址」。完成這些之後,才能以符合C語言約定的狀態開始執行main。
- A. 不會進行寫回。
- B. 一般RAM的內容在斷電後會消失。
- C. 正確。這是為了遵守C語言的初始值約定而做的處理。