av无码国产在线看岛国_日韩精品无码专区国产av影院_在线主播精品国产99热_国模无码一区二区久久_97影院九七理论片男女高清_中文字幕一级毛片_亚洲国产av无码专区亚洲av_成人黄色小说在线观看_H动漫无遮挡在线看中文_国产午夜精品理论片免费视频播放

您好,歡迎訪問上海現(xiàn)易電子元器件有限公司網(wǎng)站!

021-51870898
021-51870898   18019251567
4新聞資訊
您的位置: 首頁 ->  新聞資訊 -> 單片機

?一種430軟復(fù)位方法(原創(chuàng))

文章出處:單片機 責(zé)任編輯:上?,F(xiàn)易電子元器件有限公司 發(fā)表時間:2018-05-19

最近在搞430的FLASH的自定義法(利用串口)程序燒寫,燒寫完成后斷電復(fù)位,reset按鍵就可以運行新的程序。但是和學(xué)長交流了一下,這種方法不夠好,希望有一種軟復(fù)位的方式。于是百度了一下,都是些對看門狗進行寫入特殊值使得430的cpu復(fù)位。反正個人是沒有采用。


因為在搞程序的燒寫下載,所以看了一下430的BSL??吹嚼锩嬗幸欢卧挘P(guān)于從C代碼中啟動BSL的方法。如下:


從一個外部應(yīng)用中啟動BSL

將程序計數(shù)器設(shè)定到內(nèi)存為位置0x1000 來啟動BSL。堆棧一直被復(fù)位,而RAM 被清空。應(yīng)該注意的是,GIE 位未被禁用,所以如果不需要中斷的話,這一步應(yīng)該通過調(diào)用應(yīng)用來完成,并且如果它們被使用的話,這一步應(yīng)該從“返回BSL”返回。

由于堆棧被復(fù)位,位置0x1000 也可以被作為一個C 功能進行調(diào)用,示例代碼如下:
             ((void (*)())0x1000)()


于是想到,既然可以從C里面跳轉(zhuǎn)到0x1000,那么也可以跳轉(zhuǎn)到其他地址,比如復(fù)位地址了。


以6638為例。430的復(fù)位中斷矢量地址是0xFFFE,里面存儲了將要跳轉(zhuǎn)的物理地址。6638的代碼區(qū)起始地址是0x8000,正常復(fù)位是先進入復(fù)位中斷,然后PC指針導(dǎo)入地址0x8000,然后從0x8000開始執(zhí)行代碼。那么軟復(fù)位則是,執(zhí)行((void (*)())0x8000)(),直接PC指針被導(dǎo)入0x8000的地址,而這個地址正好是6638的代碼區(qū)起始地址,于是軟復(fù)位了。個人分析一下這個指令,如有錯誤敬請大神們指正。


從代碼上講,(void (*)()是一個指向空函數(shù)的指針,((void (*)())0x8000)()是將0x8000強制轉(zhuǎn)換為函數(shù)指針后進行函數(shù)調(diào)用,于是0x8000便被送入了PC指針。


對于其他的430單片,去查其數(shù)據(jù)手冊FLASH段,弄清其代碼區(qū)的開始地址,也可以用這個方法軟復(fù)位了。


實測,IAR,CCS下編譯、實踐通過。


最后,查了一下,對于計算機系的這個方法可能是常識了,但是對于搞單片機、嵌入式的大多還不知曉,個人就寫出來,大家交流交流。已經(jīng)知道這個方法的高手們,就一笑而過吧!


上?,F(xiàn)易電子元器件有限公司 版權(quán)所有 未經(jīng)授權(quán)禁止復(fù)制或鏡像

CopyRight 2020-2025 29711999.com.cn All rights reserved   滬ICP備2020031792號

電話

易經(jīng)理

18019251567

微信

易經(jīng)理

易經(jīng)理

頂部

咨詢