关于keil软件error:L6236E:NO section matches selector-no section to be FIRST/LAST的报错解决方法
最近在學習匯編的過程中網上論壇看一些大佬的程序,照著寫完之后編譯出現error:L6236E:NO section matches selector-no section to be FIRST/LAST。然后跳轉到.sct的文件中,
?
?
照著百度相似問題的解決方案并沒有成功。后面發現是自己配置的問題,記錄一下也算給自己留點總結。
首先NO section matches selector-no section to be FIRST/LAST這個問題確實是因為單片機無論使用C還是匯編語言都是要有啟動文件的,沒有加載文件的話編譯器是無法通過的。因為對于單片機來說,不同款的單片機都有著不同的映射區域和啟動地址。啟動文件常規定了單片機上電之后的初始幾步的啟動流程。
因此解決這個問題最常見的就是我們忘記給工程項目文件加載啟動文件了。
以STM32芯片為例,啟動文件格式常為:startup_stm32xxfxx.md.s格式。一般來說啟動文件都是用匯編指令寫的,因此后綴是.s格式。不難從資源包中找到。但是芯片和啟動文件注意要對應上,不一致的話程序是無法正常在單片機上運行的。
解決方法:在Manage Project Items中添加進去啟動文件就可以了。
?
但是因為我是自己寫了一份啟動文件,一開始就加到Project中去了。并且這份文件在別的項目工程中運行也是正常的,我就沒有再往啟動文件的問題上懷疑。所以網上的啟動文件的添加沒有解決我的問題。
后面我檢查自己配置情況的時候,發現是Options配置界面上勾選了Use memory layout from target Dialog。
解決方案:去掉Use memory layout from target Dialog這個選項的勾選,并且將Scatter file下面的文本框的路徑要刪掉,保證空白。重新編譯就成功了。
?原因分析:scatter文件提供內存映象中各個區??域的分組和放置詳細信息。勾選了Use Memory Layout from Target Dialog時使用的是The Memory Areas settings in Target Dialog自動生成的scatter文件,不勾選時使用的是scatter file框里的scatter file,你可以對它進行自定義編輯,它的內容一般來說是由取消勾選前由The Memory Areas settings in Target Dialog自動生成的。當你情空scatter框后會在鏈接命令后指明ro、rw的基地址。Read/Only Memory Areas中的起始地址和大小對應的是scatter文件中的映像文件的加載地址和加載存儲區域的大小;映像文件中RO部分的加載地址等于運行地址;而Read/Write Memory Areas中的地址即RW部分的運行地址。
總而言之就是,我在偷懶使用了之前編譯過的項目復制過來,重新寫了程序,但是因為勾選了這個
The Memory Areas settings in Target Dialog,所以還保留的是上次使用的scatter file的配置。和這次使用的芯片的起始地址還有運行地址是不一致的。導致了無法正常識別啟動文件。
可以歸納為兩步,第一添加啟動文件到項目中去,去掉默認的勾選并且確保下面scatter file里面的路徑為空,讓他自行編譯就可以了。
?
總結
以上是生活随笔為你收集整理的关于keil软件error:L6236E:NO section matches selector-no section to be FIRST/LAST的报错解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软考之软件设计师——计算机网络及知识产权
- 下一篇: 保护您的AWS网站免受DDoS攻击