LPC2220啟動程式設計的一些感想

2021-04-14 00:22:37 字數 1003 閱讀 7244

lpc2220啟動程式設計的一些感想

arm搞了差不多有半年了,但是對啟動程式設計仍然很不清楚,大部分的啟動**都是利用周立功的現成的程式。

正好現在有個專案,也抽空好好研究了一下arm的啟動。

因為lpc2220內部沒有flash(這一點,值得懷疑,估計裡面是有存放bootloader的flash),所以要外擴flash,用的是39vf160,程式寫完後放在外部flash裡面,這個時候就有疑問了,程式放在外部flash裡面,是怎樣啟動的呢?

查閱了很多的資料,這裡尤其要感謝杜雲海老先生寫的一些東西,對這樣的好前輩我表示致敬。原來lpc2000系列的arm裡面好像都有出廠時固化好的bootloader,一上電,其實執行的並不是你的程式,而是內部固化好的bootloader程式,它先進行一下memerroy map ,就是初始化位址,也就是說,本來沒有電的時候,不是沒有位址0嗎,但是上電後要知道那個數字對應那個位址啊,比如0就是flash 的第乙個位址,一次類推,就是這個作用,給記憶體附上相應的值,然後馬上就來一次remap,這裡是把bootloader對映到0x7fffe000~0x7fffefff;然後執行bootloader,這些都是硬體完成的。

好了,那我的程式什麼時候執行呢,是怎樣執行的啊,我知道有那麼幾個管腳是來選擇外部flash啟動的,可是我不清楚我的二進位制檔案是怎樣組成的,查了很多的資料,在杜雲海的《arm學習報告001》中得到很好的答案。這裡就不多說了,可以在網上找到的。

原來二進位制檔案中各個區域是連續的,也就是說在載入時域中,ro段,rw段在物理上是連線的,也就是說在,在flash 中ro段後面緊跟的就是rw段,可是他們又是怎樣從載入是域到執行時域的呢,查了很多才明白原來這個工作是ads幫你做了,如果你呼叫__main;則它會自動生成一些**幫你把資料拷貝到你在scatter file指定的位址,那個時候我還是不明白,比如你把0x80000000對映成了0x00000000,rw段的執行時域是0x40000000,那怎麼找到這個位址的,如果是相對位址的話那rw段執行的位址應該是0xc00000000了啊,後來明白了ads幫你生成的很多標號都是絕對位址,所以不會錯誤的。

初學SuperMap Object的一些感受

本人第一次接觸supermap object,我把這段時間裡的感受寫出來讓大家體會一下,這是我第一次在寫文章,寫得不好,請見諒,也請大家指點指點。在這之前,先了解什麼是元件式gis。gis geographic information system是一種對空間資料進行處理的乙個工具。它縮短了對空間資...

程式設計的一些習慣

最近在寫一些框架應用類的程式,其中出現了一些莫名其妙的bug,或者是令人匪夷所思的問題,解決的方案網上沒有,當自己解決了之後,對於解決的辦法也是哭笑不得,例如重新引入工程之類的解決辦法,讓自己覺得讓這些低階的錯誤影響了自己的 推進速度實在是不應該,太多的時間都花在除錯bug上了,而不是了解業務或者是...

程式設計的一些特點

回家路上稍微有點感想,記一下。在比較大的規模的專案裡面程式設計,還是比較費神的,所以狀態的差別真的會很有影響。保持心無旁焉的狀態是很重要的,同時避免掉周圍的不利影響。在走下去可能就是涉及到對工作的信仰上了。太遠了 然後就是長時間的集中,也可能是我的記憶力不夠好,總之我覺得最強的生產力就是在長時間的連...