icc到iar移植日志

来源:互联网 发布:mac切换大写字母 编辑:程序博客网 时间:2024/06/10 16:34

注意IAR中对unsigned char和signed char的比较同样都是1但是IAR认为这不相等

引用amobbs以为网友的总结

1、包含文件修改
新建一个 Workspace 文件和 Project 文件,移除默认建立的 main.c 文件,将
ICC 下的 C 语言文件添加进来
<iom128v.h> 改为<iom128.v>;
去除<macros.h>和<eeprom.h>;
2、中断函数定义修改
原为:
#pragma interrupt_handler TIMER3_OVF_ISR: 30
void TIMER3_OVF_ISR(void)


修改后为
#pragma vector=TIMER3_OVF_vect
__interrupt void TIMER3_OVF_ISR(void)
3、存储到 flash 中的常量定义修改
原为: const uchar item9[3]={5,6,50};
修改后为: __flash uchar item9[3]={5,6,50};
原为: void w_hzstr(uchar colum4,uchar page4,const uchar *str1)
修改后为: w_hzstr(uchar colum4,uchar page4, uchar __flash* str1)
4、eeprom 存储函数修改
原 为 直 接 调 用 : LanguageType= EEPROMread(127); 和
EEPROMwrite(126,dg_interval);
修改后两个函数需自定义如下:
uchar EEPROMread(uint EEAd)
{
uchar i;
__EEGET(i,EEAd);
return(i);
}
void EEPROMwrite(uint EEAd,uchar EEDa)
{
__EEPUT(EEAd,EEDa);
}
5、一些变量位的定义需手工添加或直接用相应数字代替
如: #define WDE 3
在程序中看到 WDE 直接用3代替掉就可以了
或将 WDTCR=(1<<WDE); 改为: WDTCR_WDE=1;
6、中断使能和中断关闭部分修改
原为: SEI(); 和 CLI();
修改后为 __enableinterrupt(); __disableinterrupt();
7、Linker - List 菜单下 generate linker listing 选项打勾,生成*.map 文
件,在其中找到 RSTACK CSTACK 的最大值,
然后在 general Options - System 菜单下设置一个大于刚才找到的 RSTACK 和
CSTACK 最大值,如下面可设为大于0x20和0x46的值即可
RSTACK CSTACK
| Stack used (prev) : 0000001C 00000046
02 __flashcpy
| Stack used (prev) : 0000001C 00000046
| + function block : 00000002 00000000
02 __memclr
| Stack used (prev) : 0000001C 00000046
| + function block : 00000002 00000000
01 __segment_init
| Stack used (prev) : 0000001E 00000046
| + function block : 00000002 00000000
<-Sub-tree of type: Function tree
| Stack used : 00000020 00000046

0 0
原创粉丝点击