會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客



(1) 2 »


關於GOTO指令 在C語言用法
高級會員
註冊日期:
2010/08/15 00:05
所屬群組:
註冊會員
文章: 87
等級: 8; EXP: 29
HP : 0 / 182
MP : 29 / 4222
離線
請問各位先進,小弟目前在寫Bootloader
會用到GOTO這個指令

我目前了解到的GOTO指令好像都是要確切知道詳細位置才能使用

可是我的這個位置是會變的 所以沒辦法寫固定死

所以我想說可否能用把位置丟到一個變數裡面

然後用GOTO跳到這個變數所寫的位置去

例如

Unsigned long Address;

Address=0x11FFF;

Goto *Address;<==這是亂寫的

大概是這樣的概念

謝謝

4月30日 14:10:50

匿名小鬼 於 2018年04月30日 14:28:04
匿名小鬼 於 2018年04月30日 14:56:46
轉換PDF檔 列印


Re: 關於GOTO指令 在C語言用法
資深會員
註冊日期:
2012/05/04 19:18
所屬群組:
註冊會員
文章: 203
等級: 13; EXP: 28
HP : 0 / 307
MP : 67 / 5565
離線
goto指令好像只能goto "label",label就是指事前定義好的一個程式區塊的開頭"名稱",是不是有其他做法不確定!

4月30日 15:14:13
轉換PDF檔 列印


Re: 關於GOTO指令 在C語言用法
資深會員
註冊日期:
2007/06/05 21:45
所屬群組:
註冊會員
文章: 978
等級: 27; EXP: 73
HP : 0 / 668
MP : 326 / 21712
離線
原則上bootloader是不知道 真正的程式的執行點...

>>可是我的這個位置是會變的 所以沒辦法寫固定死

所以 你的(初始)想法是對,但不太可行,不務實...

想一個問題,你到的機關去洽公辦事...
想一下這個機關有十種業務...
你希望來的人每一個人都要知道去那一個櫃台洽辦...
還是有一個"固定"窗口,經過這個窗口,然後去你要洽辦的櫃台

所以bootloader跟"真正"程式配合,一般實作就是用"固定"窗口

例: bootloader --> goto 0x1000 --> (程式) goto 真正"入口"

註: 0x1000跟bootloader大小有關...

4月30日 20:26:39
轉換PDF檔 列印


Re: 關於GOTO指令 在C語言用法
資深會員
註冊日期:
2004/05/19 03:43
來自 台灣
所屬群組:
註冊會員
文章: 1749
等級: 35; EXP: 10
HP : 0 / 852
MP : 583 / 35273
離線
你是要嚐新 or 真有需要?

如要嚐新 去做就對了

如真有需要 或者可試試 do case 的做法 ...




.

4月30日 21:52:38
轉換PDF檔 列印


Re: 關於GOTO指令 在C語言用法
高級會員
註冊日期:
2010/08/15 00:05
所屬群組:
註冊會員
文章: 87
等級: 8; EXP: 29
HP : 0 / 182
MP : 29 / 4222
離線
對,所以我有點困擾XD

主要原因是 我想要更新BOOTLOAD的程式,利用BOOTLOADER
我總共會有兩個Bootloader
一個是最原始的Bootloader
另一個是新Bootloader

因為偶爾會發現新的Bootloader 會有Bug 所以會用舊的Bootloadere
更新 新的Bootloader

但是新的Bootloader 我擺放位置是在最後面的,而且容量會變化

容量一變化 ,擺放位置也會更動

所以我才會有點苦惱

5月02日 10:28:44
轉換PDF檔 列印


Re: 關於GOTO指令 在C語言用法
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14380
等級: 72; EXP: 87
HP : 1078 / 1796
MP : 4793 / 74620
離線
這要用嵌入式的組合語言方式來使用這 goto <Address> 的方式。
你是用 C18 還是 XC8 ? 嵌入式語法在其使用手冊都有說明的。

底下為 C18 使用範例:


_asm //begin in-line assembly
goto isr_high //go to isr_high function
_endasm //end in-line assembly

5月02日 14:53:45
轉換PDF檔 列印


Re: 關於GOTO指令 在C語言用法
資深會員
註冊日期:
2009/04/07 13:30
所屬群組:
註冊會員
文章: 162
等級: 11; EXP: 78
HP : 0 / 269
MP : 54 / 7309
離線
Microchip 的 16 bit Mcu 中,
goto 指令並不存在直接達成你所需功能的格式.
如果你使用的是 XC16 諞譯器,
那麼可以試試以下的程式碼.
或許能夠達成你的需求.

void Do_Goto(unsigned long Goto_Target)
{
Goto_Target &= 0x7FFFFF; /* Program size limit */
asm(" MOV.D [W14], W0");
asm(" ULNK");
asm(" MOV.W W1, [W15 - 2]");
asm(" MOV.W W0, [W15 - 4]");
asm(" RETURN");
}

5月02日 22:54:08
轉換PDF檔 列印


Re: 關於GOTO指令 在C語言用法
高級會員
註冊日期:
2010/08/15 00:05
所屬群組:
註冊會員
文章: 87
等級: 8; EXP: 29
HP : 0 / 182
MP : 29 / 4222
離線
結果最後我還是沒弄出來

我是改用指引的方式

將USER APP的Hex以及 Bootloader的Hex檔案
的起始位置(0x00000)的資料讀出
然後分別放在0x200(USER APP) 跟 0x208(Bootloader)
用索引的方式跳

意思是一開始程式執行0x0000行時候會先跳到0x208
然後再由0x208跳到正確的Bootloader位置
當執行完成Bootloader之後再跳到0x200
之後再轉跳到USER APP的位置


這樣我的USER APP 跟Bootloader就隨時都可以更換位置了

5月07日 18:08:07
轉換PDF檔 列印


Re: 關於GOTO指令 在C語言用法
資深會員
註冊日期:
2007/06/05 21:45
所屬群組:
註冊會員
文章: 978
等級: 27; EXP: 73
HP : 0 / 668
MP : 326 / 21712
離線
>>我是改用指引的方式

這個就是我說的"固定"窗口...

只是....你的使用方式,感覺怪怪的...

5月07日 19:36:01
轉換PDF檔 列印


Re: 關於GOTO指令 在C語言用法
高級會員
註冊日期:
2010/08/15 00:05
所屬群組:
註冊會員
文章: 87
等級: 8; EXP: 29
HP : 0 / 182
MP : 29 / 4222
離線
補了一張我的概念圖

附加檔案:



jpg  未命名.jpg (37.46 KB)
7268_5af117af23dae.jpg 510X699 px

5月08日 11:19:14
轉換PDF檔 列印



(1) 2 »



無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2018 Winter Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project