|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
有誰研究過keil的Startup.A51,其最后的ljmp ?C_START ?? |
| 作者:wang_jun_ 欄目:單片機(jī) |
本來我認(rèn)為初始化完了,ljmp ?C_START 僅僅跳轉(zhuǎn)到main就可以了(也就是說,編譯的結(jié)果應(yīng)該等同于ljmp main地址),但實(shí)際結(jié)果是它編譯成 ljmp localAddr ; ljmp main; 而其中l(wèi)ocalAddr(我自己隨便命名的一個標(biāo)號)那小段代碼(我們用戶本身并沒有寫這段代碼)又去好像用DPRT讀一個數(shù),再去判斷其是否為0,再來決定是否跳轉(zhuǎn)到main. 請問哪位高手知道它跳去執(zhí)行的代碼是干什么的,為什么要那么做?我想keil肯定有自己的理由,但我沒找到相關(guān)的資料有說這個的。 非常感謝高手傳道解惑 謝謝 |
| 2樓: | >>參與討論 |
| 作者: wang_jun_ 于 2006/1/5 8:14:00 發(fā)布:
up 期待高手出現(xiàn) |
|
| 3樓: | >>參與討論 |
| 作者: wang_jun_ 于 2006/1/5 19:29:00 發(fā)布:
up |
|
| 4樓: | >>參與討論 |
| 作者: wenxuan204 于 2006/1/5 20:00:00 發(fā)布:
我編程序從來不用Startup.A51,心里沒底,又占用空間 我編程序從來不用Startup.A51,心里沒底,又占用空間 |
|
| 5樓: | >>參與討論 |
| 作者: zheng79 于 2006/1/5 20:32:00 發(fā)布:
那是用來初始化全局變量的吧 |
|
| 6樓: | >>參與討論 |
| 作者: wang_jun_ 于 2006/1/5 21:46:00 發(fā)布:
其它部分我知道它的意思 只是最后一句ljmp ?C_START 編譯結(jié)果不明白。 因?yàn)槲业某绦蛴袝r在這里出錯(IAP),所以要搞明白 |
|
| 7樓: | >>參與討論 |
| 作者: fu_yun 于 2006/1/6 15:02:00 發(fā)布:
可我的keil編譯後確實(shí)只有l(wèi)jmp main;沒有多出來呀! MOV SP,#?STACK-1 ; This code is required if you use L51_BANK.A51 with Banking Mode 4 ; EXTRN CODE (?B_SWITCH0) ; CALL ?B_SWITCH0 ; init bank mechanism to code ; bank 0 LJMP ?C_START END 想必是limp ?c_start前面的代碼導(dǎo)致的吧! |
|
| 8樓: | >>參與討論 |
| 作者: llisong 于 2006/1/6 16:02:00 發(fā)布:
高手出現(xiàn)指點(diǎn)指點(diǎn) |
|
| 9樓: | >>參與討論 |
| 作者: wang_jun_ 于 2006/1/7 18:54:00 發(fā)布:
截圖如下 LJMP ?C_START 編譯結(jié)果如下(KC7.02):
|
|
| 10樓: | >>參與討論 |
| 作者: wang_jun_ 于 2006/1/7 18:57:00 發(fā)布:
而C:E047的代碼截圖如下:
|
|
| 11樓: | >>參與討論 |
| 作者: computer00 于 2006/1/7 19:10:00 發(fā)布:
奇怪,看起來好象你的代碼有問題啊。 |
|
| 12樓: | >>參與討論 |
| 作者: javie 于 2006/1/7 19:12:00 發(fā)布:
應(yīng)該是代碼的問題 |
|
| 13樓: | >>參與討論 |
| 作者: wang_jun_ 于 2006/1/7 19:34:00 發(fā)布:
Startup.A51我并沒有修改它,怎么會有問題呢? 而且正常情況下單步確實(shí)是先到E047,執(zhí)行到JZ時才轉(zhuǎn)到E00C(也就是main)的, 但有時候JZ不成立,所以執(zhí)行到下面一句去了。 |
|
| 14樓: | >>參與討論 |
| 作者: computer00 于 2006/1/7 19:42:00 發(fā)布:
能否發(fā)你的代碼,我來編譯看看結(jié)果? |
|
| 15樓: | >>參與討論 |
| 作者: wang_jun_ 于 2006/1/8 11:33:00 發(fā)布:
如何發(fā)?email地址? 我的keil是7.02的,難道別的版本的keil的ljmp ?C_START 編譯的結(jié)果只有一條ljmp ***? |
|
| 16樓: | >>參與討論 |
| 作者: computer00 于 2006/1/8 12:28:00 發(fā)布:
為啥我編譯后的結(jié)果是這樣的?(我自己的程序) C:0x0000 0208D0 LJMP C:08D0 C:0x0003 E51C MOV A,0x1C C:0x0005 75F003 MOV B(0xF0),#0x03 …………………………………… …………………………………… C:0x08CF 22 RET C:0x08D0 787F MOV R0,#0x7F C:0x08D2 E4 CLR A C:0x08D3 F6 MOV @R0,A C:0x08D4 D8FD DJNZ R0,C:08D3 C:0x08D6 7581C5 MOV SP(0x81),#0xC5 C:0x08D9 020607 LJMP main(C:0607) |
|
| 17樓: | >>參與討論 |
| 作者: wang_jun_ 于 2006/1/8 18:42:00 發(fā)布:
首先 LJMP C:08D0(應(yīng)該源代碼是 LJMP ?C_START ) 到C:08D0 執(zhí)行了 C:0x08D0 787F MOV R0,#0x7F C:0x08D2 E4 CLR A C:0x08D3 F6 MOV @R0,A C:0x08D4 D8FD DJNZ R0,C:08D3 C:0x08D6 7581C5 MOV SP(0x81),#0xC5 C:0x08D9 020607 LJMP main(C:0607),我這里是條件跳轉(zhuǎn)。 別的地方代碼可能不一樣,這不是問題的重點(diǎn),重點(diǎn)是它為什么不直接LJMP main(C:0607),而是LJMP C:08D0,在08D0的那些代碼完成了什么工作?作用何在?這就是我不明白的問題所在。 |
|
| 18樓: | >>參與討論 |
| 作者: computer00 于 2006/1/8 19:07:00 發(fā)布:
上面那段代碼完成了內(nèi)存初始化以及堆棧指針初始化的工作啊 C:0x0000 0208D0 LJMP C:08D0 ;復(fù)位后從此開始運(yùn)行。跳轉(zhuǎn)到08D0 C:0x08D0 787F MOV R0,#0x7F ;從地址0x7F開始,一直到地址0,清0 C:0x08D2 E4 CLR A ;將A累加器清零 C:0x08D3 F6 MOV @R0,A ;將0放到0x7F的地址中 C:0x08D4 D8FD DJNZ R0,C:08D3 ;R0減1并判斷R0是否為0,若不為0,則跳轉(zhuǎn)到08D3,繼續(xù)清空內(nèi)存 C:0x08D6 7581C5 MOV SP(0x81),#0xC5 ;初始化堆棧指針為0xC5 C:0x08D9 020607 LJMP main(C:0607) ;跳轉(zhuǎn)到主函數(shù)開始執(zhí)行 |
|
| 19樓: | >>參與討論 |
| 作者: wang_jun_ 于 2006/1/9 8:06:00 發(fā)布:
我的startup生成的代碼明顯與你的不同 我的是給DPTR一個值(一般是#0003,但不同的程序會不一樣),然后去讀,再去JZ。你的KEIL版本? |
|
| 20樓: | >>參與討論 |
| 作者: wswh2o 于 2006/1/9 8:54:00 發(fā)布:
re 代碼: 155: LJMP ?C_START C:0x0D6C 020DAA LJMP C:0DAA C:0x0D6F 020636 LJMP main(C:0636) C:0x0D72 E4 CLR A C:0x0D73 93 MOVC A,@A+DPTR C:0x0D74 A3 INC DPTR C:0x0D75 F8 MOV R0,A C:0x0D76 E4 CLR A C:0x0DAA 90172E MOV DPTR,#0x172E C:0x0DAD E4 CLR A C:0x0DAE 7E01 MOV R6,#0x01 C:0x0DB0 93 MOVC A,@A+DPTR C:0x0DB1 60BC JZ C:0D6F C:0x0DB3 A3 INC DPTR C:0x0DB4 FF MOV R7,A C:0x0DB5 543F ANL A,#0x3F |
|
| 21樓: | >>參與討論 |
| 作者: wswh2o 于 2006/1/9 8:59:00 發(fā)布:
好像在讀code區(qū)? |
|
| 22樓: | >>參與討論 |
| 作者: computer00 于 2006/1/9 9:03:00 發(fā)布:
我版本是UV2,C編譯器是7.06,匯編器是7.07 如果可以的話,你把所有文件發(fā)到我郵箱我來編譯下,看看是怎樣的。 你是不是用了外部RAM區(qū)? 郵箱地址:computer-lov在tom.com |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |