新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式軟件開發之:編譯器的缺省行為

        嵌入式軟件開發之:編譯器的缺省行為

        作者: 時間:2013-09-30 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/257029.htm

        13.2.4 鏈接程序放置規則

        鏈接程序遵守一組規則,以決定代碼和數據位于存儲器中的什么位置,如圖13.4所示。

        鏈接程序放置遵循以下規則:

        ① 映像首先按屬性組織:RO段在最低的存儲器地址,其次是RW段,然后是ZI段。每一種屬性中,代碼在數據之前。

        ② 鏈接程序按名稱的字母順序放置輸入段(Section)。輸入段名稱即匯編程序AREA偽操作定義的名稱。

        圖13.4 鏈接程序放置規則

        ③ 在輸入段中,獨立對象的代碼和數據,按照對象文件在鏈接程序命令行中被指定的順序放置。

        要精確放置代碼和數據,公司建議不要過分依靠這些規則。相反,必須使用分散加載機制來完全控制代碼和數據的放置。請參閱下一章的調整映像存儲器映射以適應目標系統硬件存儲器的實際要求。

        13.2.5 應用程序啟動

        多數嵌入式系統中,執行主任務前,執行初始化序列來設置系統。默認的RVCT初始化序列如圖13.5所示。

        圖13.5 默認RVCT初始化序列

        在進入用戶代碼(main())前,初始化序列可分成三個功能塊:__main直接跳轉到__scatterload;__scatterload負責建立運行時的映像存儲器映射,而__rt_entry(運行時的入口)則負責初始化C庫。

        __scatterload執行代碼和數據復制以及ZI數據的清零。對于ZI數據的清零和未改變的RW數據來說,這一步總是要做的。

        __scatterload跳轉到__rt_entry。它設置應用程序的棧和堆,初始化庫函數及其靜態數據,并調用任何全局聲明的對象的構造函數(僅C++)。

        然后__rt_entry跳轉到應用程序入口main()。主應用程序結束執行時,__rt_entry將庫關閉,然后把控制權交還給調試器。

        RVCT中,函數main()有一個特殊含意。main()函數的存在強制鏈接程序鏈接到__main和__rt_entry中的初始化代碼。沒有main()函數,就不會鏈接到初始化進程,那么一些標準C庫功能就不會得到支持。



        [1] 在一些的中文參考文獻中,將譯為半主機。


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 潼南县| 元谋县| 屯昌县| 新绛县| 巴林右旗| 周至县| 会昌县| 方山县| 京山县| 汾西县| 孝昌县| 江陵县| 江津市| 揭阳市| 阳西县| 古丈县| 鹰潭市| 仙居县| 保定市| 扶风县| 桃江县| 三门峡市| 福安市| 河津市| 南江县| 应城市| 磴口县| 乐至县| 星子县| 收藏| 柘城县| 镇巴县| 丰镇市| 弋阳县| 抚宁县| 洪洞县| 岢岚县| 大洼县| 南平市| 青神县| 安顺市|