1、IAR中无法程序跳转问题
在工程的C编译器选项里的预编译添加$TOOLKIT_DIR$\inc解决,需要clean一下工程再make即可。($TOOLKIT_DIR$:这个语法表示包含文件的路径在 IAR 安装路径的 8051文件夹下,也就是说 IAR安装在C盘中,它就表示包含文件指向 C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0\8051\inc)
2、IAR不支持位定义怎么实现位访问
IAR for 51中位定义如下,与keil对比如下,e.g.PSW_bit.P = 1;IAR位访问格式。
在IAR位定义
在keil中位定义
3、IAR与keil中断函数区别
中断函数是如下形式
在keil中:
void Timer0_isr(void) interrupt 1
{
//code
}
而在IAR中:
{
//code
}
而在IAR中:
#pragma vector=timer0
__interrupt void Timer0_isr(void)
{
//code
}
__interrupt void Timer0_isr(void)
{
//code
}
在io8051.h系统头文件中自定义timer0
#define timer0 0x0B /* Timer 0 Interrupt */
这里 __interrupt 表示Timer0_isr()是一个中断函数;#pragma vector 说明该中断函数的入口地址。
这里 __interrupt 表示Timer0_isr()是一个中断函数;#pragma vector 说明该中断函数的入口地址。
4、code和const
只需要吧code关键字替换为const就行了。但是编译报错,说定义的常量数组太大,这是为什么。打开工程的option选项,首页右下角有个关于常量位置的设置,选择将常量放到代码空间即可。
5、IAR的Linker错误问题
Error[e12]: Unable to open file 'C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.0\8051\LIB\DLIB\dl-pli-nlxd-2e16x01n.r51'
解决问题方式,更改配置如下所示: