線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:820
推到 Plurk!
推到 Facebook!

Keil專案轉移到IAR的問題

缺席
taishyang
站務副站長


發表:377
回覆:5486
積分:4552
註冊:2002-10-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2016-08-31 17:11:30 IP:59.127.xxx.xxx 訂閱


請問大家:
在KEIL中,固定的table這樣定義 code U8 tableXXX[] = {...};
在IAR中, 固定的table這樣定義 const U8 __code tableXXX[] = {...};
函式的原型:
U16 TXPacket( U8 zFrmType, U8 *zData);

KEIL可以這樣呼叫TXPacket(0xA0, (U8*)tableXXX);
但IAR會有問題,必須要把函式的原型改成U16 TXPacket( U8 zFrmType, const U8 __code*zData);
但同樣的函式KEIL還可以代入一般的U8 buff[]={...}; 但IAR則不行
該如何修改才能像KEIL一樣通用呢?

謝謝



編輯記錄
taishyang 重新編輯於 2016-08-31 17:12:04, 註解 無‧
taishyang 重新編輯於 2016-08-31 17:12:32, 註解 無‧
taishyang 重新編輯於 2016-09-01 14:51:45, 註解 無‧
walltsou
一般會員


發表:2
回覆:34
積分:22
註冊:2012-09-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2016-09-13 15:00:42 IP:223.137.xxx.xxx 訂閱
我沒有跨這二個軟體
是有將程式在win32及STM32中間移動。
對於型別差異是利用編譯器專用字去識別編譯器。
在我的例子上是這樣寫:
#ifdef _WIN32
// WIN32專用定義
#else
// STM32專用定義
#endif
對你來說 一個是有定義 _CODE,另一個就是將它改為無字
可能的寫法是
#ifdef (Keil編譯器有找到)
#define _CODE
#endif
------
目前以STM32為主力
部落格
http://wallace7914032.blogspot.tw/
taishyang
站務副站長


發表:377
回覆:5486
積分:4552
註冊:2002-10-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2016-09-13 19:32:26 IP:59.127.xxx.xxx 訂閱
謝謝回覆, 但我的問題在於Keil能區分出xdata/code memory的位址,IAR卻不行
假設我的table放在code memory區域的位址0xabcd, Keil是以code當關鍵字,IAR是以const __code
Keil的函式經過型別轉換可以知道代入的table是放在code memory區域位址0xabcd的資料
IAR則會認為是xdata區域位址0xabcd的資料 ><
walltsou
一般會員


發表:2
回覆:34
積分:22
註冊:2012-09-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2016-09-14 15:06:35 IP:223.140.xxx.xxx 訂閱
個人是使用segment去管理記憶體放置區的。
在link config內就可以宣告記憶體節區名。
在STM32F4中有一塊近端高速記憶體,我就是用節區名分開使用
#ifdef STM32F4XX
static unsigned char ucHeap[ configTOTAL_HEAP_SIZE ] @ ".ccmram";
#else
static unsigned char ucHeap[ configTOTAL_HEAP_SIZE ];
#endif
這樣在不是使用STM32F4系列時,例如在STM32F2XX時,就會使用一般記憶體
------
目前以STM32為主力
部落格
http://wallace7914032.blogspot.tw/
taishyang
站務副站長


發表:377
回覆:5486
積分:4552
註冊:2002-10-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2016-09-14 17:41:42 IP:59.127.xxx.xxx 訂閱
謝謝回覆,小弟忘了說,我用的是8052 8bits MCU ><

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2016-09-28 22:26:40 IP:124.8.xxx.xxx 訂閱
若可以, 請設定使用與Keil C相同的compiler應該就可以解決.

以上供參考. IAR小弟也沒使用過.
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
taishyang
站務副站長


發表:377
回覆:5486
積分:4552
註冊:2002-10-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2016-10-03 16:35:05 IP:59.127.xxx.xxx 訂閱
感謝前輩回覆,但Keil / IAR 各家都用自己的compiler, 我還真不知道該怎麼互通@@

===================引 用 文 章===================
若可以, 請設定使用與Keil C相同的compiler應該就可以解決.

以上供參考. IAR小弟也沒使用過.

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2016-10-04 12:27:43 IP:113.196.xxx.xxx 訂閱
網路上看了一下IAR界面, 不能指定compiler.

有看到converter, 但是好像只有支援Keil 4.x
http://supp.iar.com/FilesPublic/UPDINFO/010824/ew/doc/EW8051_MigratingFromKeil.pdf

移植參考
http://www.testech-elect.com/iar/appnotes/AN-8051-keil2iar.htm

看來大部分project沒辦法無痛轉移. 都需要修正. 可能要re-go through一次了.

FYI


===================引 用 taishyang 文 章===================
感謝前輩回覆,但Keil / IAR 各家都用自己的compiler, 我還真不知道該怎麼互通@@

===================引 用 文 章===================
若可以, 請設定使用與Keil C相同的compiler應該就可以解決.

以上供參考. IAR小弟也沒使用過.
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
taishyang
站務副站長


發表:377
回覆:5486
積分:4552
註冊:2002-10-08

發送簡訊給我
#9 引用回覆 回覆 發表時間:2017-05-26 09:47:49 IP:59.127.xxx.xxx 訂閱
後來還是認命的另外重寫對應的function以及修改因不同編譯器造成的編譯問題,謝謝大家 ~~
系統時間:2018-01-20 9:02:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!