久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
MCU在運行到main()之前都干了什么
[打印本頁]
作者:
wangyin
時間:
2014-8-10 22:15
標題:
MCU在運行到main()之前都干了什么
很多ARM工程師想當然的以為,自己開發的應用程序,用AK100Pro仿真器下載進入調試,MCU的PC指針必定停留在main()函數的入口。但實際上,在運行到main()前,MCU還做了很多事情。這里以一個LPC1700的Keil工程為例說明。
MCU上電復位后,通常會從一個固定的地址開始啟動,比如ARM7復位后的入口地址為0x00000000;或者類似Cortex-M內核從中斷向量表中取出入口地址,中斷向量表的地址必須是固定的。
LPC1700為Cortex-M3內核,所以啟動時會從中斷向量表(地址0x00000000)處取出入口地址和堆棧指針,分別加載到PC和SP中。
入口地址處通常放的是芯片相關的啟動代碼。這部分代碼要完成很多芯片初始化的動作,由于與特定型號芯片相關,所以不能隨隨便便地就用到別的型號芯片上。通常我們會使用官方提供的例程,然后以此為基礎進行必要的修改。以下是LPC1700的初始化代碼,所有硬件相關的初始化操作放在了SystemInit()函數中。
SystemInit()完成的功能可以有:設置看門狗、外部存儲器接口、內核時鐘等等。當然,這些代碼有些是可以放到后面的main()函數中完成,但有些則必須放在運行到__main之前完成。
芯片初始化完成后,接下來是執行C運行環境的初始化。C環境的初始化主要包含兩點:
按照分散加載文件的配置,將相應的數據段和代碼段拷貝到相關位置,將ZI段清零。通過這個功能可以將C代碼中未指定初始化值的全局變量和靜態變量對應的內存清零,然后將指定初始化的全局變量和靜態變量對應的內存初始化。另外,如果有通過分散加載文件設置代碼存儲在Flash中,然后自動搬運到RAM中運行(該功能將在后續文章中細講),也會在該階段完成這個自動搬運工作。
之后是初始化C庫,完成后才跳轉到main()。
以下是LPC1700工程的一段初始化代碼,不同的工程配置,反匯編出來的結果略有不同。
所以說,在main()運行前,MCU其實已經做了很多工作了。如果程序下載沒有出現問題,但是就是跑不到main(),有可能不是仿真器的問題。是否會是main()之前的初始化操作異常?
-------------------------------
后面繼續分享這種小的技術總結。如有不對,歡迎拍磚。
作者:
涼風習習
時間:
2015-12-29 14:23
感謝感謝感謝感謝
作者:
marvinkoala
時間:
2016-8-5 10:34
樓主寫的好,我來幫你消滅孤單的回復。
作者:
sxsdk
時間:
2016-8-28 18:44
后面繼續分享這種小的技術總結
作者:
xxianhua
時間:
2017-2-13 20:57
單片機根據啟動模式以及BOOT的管腳電平進入每部固化好的程序
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲欧美中文字幕在线观看
|
www.日本三级
|
国产精品入口
|
国产欧美精品区一区二区三区
|
国产日韩欧美
|
91社区在线观看播放
|
日日夜夜免费精品
|
国产精品久久福利
|
亚洲国产精品第一区二区
|
国产激情一区二区三区
|
综合在线视频
|
日韩一区二区三区在线观看
|
国产成人一区二区
|
插插宗合网
|
黄色一级毛片免费看
|
国产精品1区2区3区 男女啪啪高潮无遮挡免费动态
|
女同久久另类99精品国产
|
粉嫩一区二区三区性色av
|
国产精品亚洲第一区在线暖暖韩国
|
成人一区在线观看
|
国产精品久久久久久久久久久久午夜片
|
黄色片在线看
|
国产在线永久免费
|
特黄毛片视频
|
岛国av一区二区
|
欧美综合视频在线
|
91婷婷韩国欧美一区二区
|
91麻豆精品国产91久久久久久久久
|
欧美日韩三级在线观看
|
久久久久精
|
国产成人精品一区二三区在线观看
|
8x国产精品视频一区二区
|
成人免费在线观看
|
丝袜 亚洲 欧美 日韩 综合
|
中文字幕免费观看
|
亚洲精品www
|
久久精品视频免费看
|
欧美一级片在线播放
|
亚洲视频免费在线观看
|
欧美福利一区
|
久久国产成人精品国产成人亚洲
|