Re: 想請問bootloader跟使用者程式是不是會衝突呢?
|
||||
---|---|---|---|---|
初級會員
|
建議應該使用GOTO xxxx(LABLE)的用法吧
位址由組譯器去定義。 程式的架構有沒有BOOT自已應該很清楚,直接 定址一定會出問題滴...
發表於: 2006/10/23 20:18
|
|||
|
Re: 想請問bootloader跟使用者程式是不是會衝突呢?
|
||||
---|---|---|---|---|
高級會員
|
金的吶~GOTO 果然是絕對定址
org 0x0000 goto 0x1a --> 0DEF,00F0 org 0x0002 goto 0x1a --> 0DEF,00F0 這樣子感覺起來.... 要嘛..程式一開始就必須偏移... 不然bootloader程式就要針對某些指令做偏移的動作.. 還是有其它的方式..++?
發表於: 2006/10/23 8:52
|
|||
|
Re: 想請問bootloader跟使用者程式是不是會衝突呢?
|
||||
---|---|---|---|---|
新會員
|
所以問題就是...
PIC類似GOTO跟bra之類的指令 到底是絕對定址還是相對定址呢? 我看PIC18F4520的DATA Sheet 第279跟288頁 指令說明 BRA 的動作是: (PC)+2+2n-->PC 這樣看來是相對定址 可是...!!! GOTO 的動作 卻是 k--->PC<20:1> 這樣應該是絕對定址 所以 到底是怎麼一回事呢? 懇請解答 謝謝!
發表於: 2006/10/22 15:15
|
|||
|
Re: 想請問bootloader跟使用者程式是不是會衝突呢?
|
||||
---|---|---|---|---|
高級會員
|
我也想了解一下..
我覺得是指令組譯出來的定址方式 goto 0x30 ... complier 出來後 0x30 如果是pc相對定址... 那goto 0x30...實際上是偏移pc 值 0x30的位址.. 而不是跳到程式0x30的位址... 這樣如果程式是從0x200開始.. goto 0x30...實際上就是偏移到0x230的位址.. 所以程式還是能執行... 如果bootloader程式..把沒有設定偏移的程式.. 從0x200開始燒錄..應該也不會影響程式的執行 不知道我這樣想對不對??..
發表於: 2006/10/21 15:50
|
|||
|
想請問bootloader跟使用者程式是不是會衝突呢?
|
||||
---|---|---|---|---|
新會員
|
想請問bootloader跟使用者程式是不是會衝突呢
<<觀念問題想請教..>> 假設現在有一個bootloader ,佔用0x000~0x200的程式記憶體 然後使用者的程式有一段是這樣的 ..... org 0x020 goto 0x030 .... 如果用bootloader將程式燒進去PIC的話(以18F452為例) 這行 "goto 0x030" 指令在PIC的真正的程式記憶體位置應該會是0x220 (因為被bootloader偏移了) 可是他的指令"goto 0x030" ,會不會跑回去0x030呢 (這不就跑到Bootloader)裡面去了? 但是很多bootloader卻能夠正確跳到0x230繼續執行使用者程式 可是使用者當初Compile的時候並沒有設定偏移啊 指令也是原本的指令燒進去 PIC 到底為什麼還是能夠正常運作呢? bootloader有做什麼設定嗎? 懇請解答...謝謝了!!
發表於: 2006/10/20 18:25
|
|||
|