原创 AVR studio(AVR GCC)下编译ATmega128 bootloader若干问题说明

2009-7-9 16:20 6038 15 17 分类: MCU/ 嵌入式

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);


   以上仅为个人愚见, 还请各位同行指点!

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户377235 2015-1-31 16:09

boot_spm_busy_wait 等待flash操作完成 boot_page_erase 擦除一个flash页 boot_page_fill 写入数据到flash buffer flash_page_prog 将buffer数据写入flash 我调用了这四个函数后,读RWW区的内容,仍然是0xffff,求大神指导

用户1485515 2009-10-26 14:10

有Avr小组吗?
相关推荐阅读
用户1156376 2014-08-18 17:23
[博客大赛]MDK下代码的分段管理 续3
继续写点分段管理的问题。 设计思想主要是设计一个通用的BSP,固化后只需要修改APP代码就可以,这适用于远程升级的系统或是进行二次开发的系统。 考虑到编译器链接的时候会把没有使用的代码段(...
用户1156376 2014-02-27 18:14
Freescale MCU SPI
Freescale S12 SPI: 0. 以下所述为查询模式使用SPI 1. SPI控制器有两个中断, 数据发送(SPTEF)和数据接收(SPIF) 2. 数据发送(SPTEF)标志...
用户1156376 2014-02-26 09:17
Freescale MCU摘记
仅用于记录Freescale的点滴记录: 1. 把AD口用作IO口的方法: 除了正常的设置外,还需要把 ATDDIEN 寄存器写为0xFF, 这样使能了数字IO。否则默认为AD输入。 ...
用户1156376 2013-12-14 11:33
[STM32]MDK下代码的分段管理 续2
前文所述的代码分段,限定比较大,对于使用 #pragma arm section code=".ARM.__at_0x8100000" 固定地址的方式,每个文件都需要指定不同的地址以区别。...
用户1156376 2013-12-09 18:12
[STM32]MDK下代码的分段管理
编译大型的程序时,可能某一段代码固定之后不再改变(比如BSP),而应用部分经常修改。在这种情况下,如果使用在线升级或是Bootloader的方式升级程序时,你就觉得每次升级的代码有一部分是重复的(...
用户1156376 2012-10-14 09:10
【uCOS-III移植笔记】OS启动过程
(1) 关闭系统中断 (2) CPU_Init(); 初始化CPU服务(时间戳、中断时间测量、CPU信息初始化等) (3) OSInit(); 初始化系统(系统变量、系统任务...
EE直播间
更多
我要评论
2
15
关闭 站长推荐上一条 /3 下一条