从GCC到IAR快速移植 1.增加文件 2.头文件处理 //#include<avr/io.h> #include <iom16.h> //#include<avr/eeprom.h> //#include<avr/interrupt.h> //#include<avr/wdt.h> 3.中断方式的变化 GCC中 ISR() IAR中: #pragma vector=TIMER2_OVF_vect __interrupt void timer0isr(void) { } 4.启用一些编译开关 #define ENABLE_BIT_DEFINITIONS 5.库函数快速适应 在GCC中存在相应库函数 void eeprom_read_block(uchar *data,uint addr,unsigned char length) void eeprom_write_block(unsigned char *data,uint addr,unsigned char length) 到了IAR可以自己编写一个,还用这样的名称: void eeWriteByte(unsigned int uiAddress, char ucData) { // 等待上一次写操作结束 while(EECR & (1<<EEWE)); // 设置地址和数据寄存器 EEAR = uiAddress; EEDR = ucData; //置位EEMWE EECR = (1<<EEMWE); // 置位EEWE 以启动写操作 EECR = (1<<EEWE); } unsigned char eeReadByte(unsigned int uiAddress) { //等待上一次写操作结束 while(EECR & (1<<EEWE)); //设置地址寄存器 EEAR = uiAddress; // 设置EERE 以启动读操作 EECR = (1<<EERE); //自数据寄存器返回数据 return EEDR; } void eeprom_write_block(unsigned char *data,uint addr,unsigned char length) { for(;length>0;length–) { eeWriteByte(addr,*data); addr++;data++; } } void eeprom_read_block(uchar *data,uint addr,unsigned char length) { for(;length>0;length–) { *data=eeReadByte(addr); addr++;data++; } } 6.一些语法的适应 IAR中 volitale还和一般的不兼容 不支持二进制0B…形式,可换成0x…形式 还不能之间从常数表格中写,还得读到RAM中 更换memory type,比如由tiny换成small模式 Error[Pe095]: array is too large E….h 78 等等
本文目录
本文目录