AVR studio(AVR GCC)下编译ATmega128 bootloader若干问题说明
1. 首先需要在 Memory Settings中Add: Flash .text=0xF000(使用4K).
因为GCC不像ICC那样可以自动设置,所以此步必须写入.
2. 许多人(我也是)都是按照马老师那本书上的例程来做的内部flash的操作函数, 但是我试过多遍之后发现在GCC下这个不能使用,需要使用"avr/boot.h"下声明的几个库函数, 具体如下:
boot_spm_busy_wait 等待flash操作完成
boot_page_erase 擦除一个flash页
boot_page_fill 写入数据到flash buffer
flash_page_prog 将buffer数据写入flash
有个这几个函数就可以对flash进行写入操作了. 具体为何要这样作我还不太清楚, 希望大家可以指教.
3. 程序下载完毕后如要启动, 需要调用如下函数:
boot_rww_enable
否则无法正常启动APP程序.
4. GCC对数据的处理也不太与ICC一样, 比如再读校验和的时候在ICC下进行如下操作:
CheckSum = getch() << 8; // 读校验和
CheckSum|= getch();
则可以正确执行, 8位16位之间的自动转换也正常, 但是在GCC下取有错误, 不得已写成了如下格式:
CheckSum = ((uint16)getch()&0xFF) << 8; // 读校验和
CheckSum|= ((uint16)getch()&0xFF);
以上仅为个人愚见, 还请各位同行指点!
用户377235 2015-1-31 16:09
用户1485515 2009-10-26 14:10