搜索
bottom↓
回复: 18

AVR的bootloader问题,请求大神帮忙解决一下,非常感谢。

[复制链接]

出0入0汤圆

发表于 2015-4-23 23:32:14 | 显示全部楼层 |阅读模式
我就简单的描述一下情况,这个问题困扰两天都没解决,感觉有点迷茫了,请大神指点一下,非常感谢。

也写入的函数如下:
  1. void boot_write_one_page(void)
  2. {
  3.         unsigned int i;
  4.         DataUnionByte TempData;
  5.         eeprom_busy_wait();
  6.         boot_page_erase(address);                        /* 擦除一页 */
  7.         boot_spm_busy_wait();                                /*  等待擦除完成*/
  8.         for (i=0;i<DATA_BUFFER_SIZE;i+=2)
  9.         {
  10.                 TempData.databuff8[0]=databuff.databuff8[i];
  11.                 TempData.databuff8[1]=databuff.databuff8[i+1];
  12.                 boot_page_fill_safe(i,TempData.databuff16);
  13.         }
  14.         boot_page_write_safe(address);                /* 写入一页 */
  15.         boot_rww_enable_safe();
  16. }
复制代码


用的是atmega32单片机,主要问题是,在用bootloader写入程序之后,通过jmp 0x0000直接跳到app区的代码开始执行,但是结果是当通过bootloader烧入程序之后,程序并没有运行。

下面说一下我用的工具等情况:
开发环境是atmelstudio 6(avrstudio 6)
bootloader 上位机用的是avrubd,来自邵子扬老师

通过开发环境生成hex文件,然后通过bootloader上位机烧入hex文件,上位机提示烧写成功,下位机无反映。通过flash读取函数读出来的数据与写入的一致,!也就是写入的数据是没有问题的。

静候大神指点,有什么地方不明确的地方欢迎提出,谢谢!

出0入0汤圆

发表于 2015-4-24 00:29:16 | 显示全部楼层
这是一个漫长的过程,中间有苦有乐

出0入0汤圆

 楼主| 发表于 2015-4-24 00:38:09 | 显示全部楼层
netting 发表于 2015-4-24 00:29
这是一个漫长的过程,中间有苦有乐

嗯嗯,谢谢支持

出0入0汤圆

发表于 2015-4-24 00:46:56 | 显示全部楼层
---->通过flash读取函数读出来的数据与写入的一致,!也就是写入的数据是没有问题的。

用stk500读出比较,如果FLASH一样却不能运行,再继续发帖探讨。

出0入0汤圆

发表于 2015-4-24 06:30:55 来自手机 | 显示全部楼层
路过,想学习相关的问题,苦于没有资料。

出0入0汤圆

发表于 2015-4-24 10:42:08 | 显示全部楼层
请问一下楼主,楼主在6上面的bootloader地址,在工程中怎么设置的呢?我找不到在哪里设置。

出0入0汤圆

 楼主| 发表于 2015-4-24 12:27:55 | 显示全部楼层
chenshichao541 发表于 2015-4-24 10:42
请问一下楼主,楼主在6上面的bootloader地址,在工程中怎么设置的呢?我找不到在哪里设置。 ...

属性-->Toolchain-->AVR/GUN Linker-->Memory Settings-->FLASH setment

出0入0汤圆

 楼主| 发表于 2015-4-24 12:32:07 | 显示全部楼层
cock 发表于 2015-4-24 00:46
---->通过flash读取函数读出来的数据与写入的一致,!也就是写入的数据是没有问题的。

用stk500读出比较, ...

怎么操作,麻烦指点一下,或是发个教程什么的,谢谢啦

出0入0汤圆

发表于 2015-4-24 12:56:12 | 显示全部楼层
感觉刁刁的,楼主能介绍一下这个是自己写的还是编译器自带的吗。能说一下你整个工程想要实现的功能不。想学习一下。。

出0入0汤圆

发表于 2015-4-24 14:16:37 | 显示全部楼层
1139193886 发表于 2015-4-24 12:27
属性-->Toolchain-->AVR/GUN Linker-->Memory Settings-->FLASH setment

谢谢了,我也是在这里设置的,这样写的.bootloader=0x1fc00,不知道对不对,但是app部分烧录不进去。

出0入0汤圆

发表于 2015-4-24 15:14:05 | 显示全部楼层
1139193886 发表于 2015-4-24 12:32
怎么操作,麻烦指点一下,或是发个教程什么的,谢谢啦

或者说我就不相信你写入的程序没错,你用STK500读出来对比,而不是用你自己的bootload读出来对比。如果写入真的没有错,用STK500把复位入口改为0000,看是否正常运行。如果不能说明是APP有错。

出0入296汤圆

发表于 2015-4-25 00:03:22 | 显示全部楼层
首先判断不用bootloader,直接用isp工具写入到芯片,程序是否能执行(当然,要修改启动地址到应用区)
这是要排除你观察不到现象的原因是你的应用程序本身还是bootloader。你说程序没有执行,这是一个片面
的判断,你只是观察不到你期望的现象,不代表你的jmp不成功,另外,我觉得你是不是忘记把中断向量切换
到应用区了?

出0入0汤圆

 楼主| 发表于 2015-4-25 10:30:24 | 显示全部楼层
chenshichao541 发表于 2015-4-24 14:16
谢谢了,我也是在这里设置的,这样写的.bootloader=0x1fc00,不知道对不对,但是app部分烧录不进去。 ...

烧录不进去是bootloader有问题吧

出0入0汤圆

 楼主| 发表于 2015-4-25 10:31:17 | 显示全部楼层
cock 发表于 2015-4-24 15:14
或者说我就不相信你写入的程序没错,你用STK500读出来对比,而不是用你自己的bootload读出来对比。如果写 ...

嗯嗯,就是手头上没有STK500

出0入0汤圆

 楼主| 发表于 2015-4-25 10:40:58 | 显示全部楼层
Gorgon_Meducer 发表于 2015-4-25 00:03
首先判断不用bootloader,直接用isp工具写入到芯片,程序是否能执行(当然,要修改启动地址到应用区)
这是 ...

用isp烧进去了可以执行,程序就是一个LED闪烁的程序。至于中断向量,首先在bootloader里面没用用程序,但是还是补上了中断向量的操作,就是启动bootloader时将中断向量移至boot区,退出后移至应用区。
还有个现象就是刚烧进bootloader,还没有用bootloader烧其他程序的时候bootloader会循环执行(之所以说循环执行是因为bootloader里面有计时时间到会自动推出bootloader)。当烧进去程序之后(就是一个LED闪烁的程序),bootloader就不会再循环执行了。

判断循环执行bootloader方法是因为,在bootloader里面会定时发送一个字符。

出0入0汤圆

发表于 2015-4-25 11:24:39 | 显示全部楼层
中断向量转移有时序要求的, 我记得是必须四个周期内完成, 一般C语言如果没处理好,就超出了, 然后中断向量转移不成功, 程序运行很多问题

出0入0汤圆

 楼主| 发表于 2015-4-25 11:42:40 | 显示全部楼层
tomhe666 发表于 2015-4-25 11:24
中断向量转移有时序要求的, 我记得是必须四个周期内完成, 一般C语言如果没处理好,就超出了, 然后中断向量转 ...

那我用汇编试试。

出0入0汤圆

 楼主| 发表于 2015-4-25 11:55:00 | 显示全部楼层
tomhe666 发表于 2015-4-25 11:24
中断向量转移有时序要求的, 我记得是必须四个周期内完成, 一般C语言如果没处理好,就超出了, 然后中断向量转 ...

试了,没效果。

出0入296汤圆

发表于 2015-4-25 22:33:09 | 显示全部楼层
1139193886 发表于 2015-4-25 10:40
用isp烧进去了可以执行,程序就是一个LED闪烁的程序。至于中断向量,首先在bootloader里面没用用程序,但 ...

尝试在你的测试程序里面关闭中断,并且不要开启中断,然后再做LED闪烁测试(只做闪烁),基本只依赖GPIO之类的。
主要是测试是否是因为bootloader的某些寄存器操作改变了复位状态导致的问题。另外,尝试关闭看门狗。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-18 11:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表