查看: 5767|回复: 12

ATmega168PB的 bootloader 问题求助

[复制链接]
  • TA的每日心情
    奋斗
    2017-2-23 17:29
  • 签到天数: 134 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2017-2-21 11:20:00 | 显示全部楼层 |阅读模式
    分享到:
    最近再调ATmega168PB的 bootloader,写了一个测试程序,烧写到0x0000地址可以正常运行,但是烧写到0x3800地址,就不能运行了。下边是我的烧写和fuses配置。

    代码很简单,就是让一个led灯不停地闪。代码如下:
    int main(void)
    {
        unsigned long i;
        DDRD |= 1<<7;
        PORTD|= 1<<7;
        while (1)
        {
            for (i=0;i<100000;i++);
            PORTD ^=  (1<<7);
        }
    }
            这段程序也烧写到bootloader区了

    fuse配置是1E00。

      烧写完,attach to target,复位后程序指针就在1E00处

    但是一运行,就跑飞了。上边这些跳转不是太懂什么意思,是程序写的有问题吗?
            这个led程序下载到0000处运行是可以运行的。

            另外,atmel官方有ISP下载的bootloader demo和配套的上位机吗?







    222.jpg
    333.jpg
    444.jpg
    555.jpg
    回复

    使用道具 举报

  • TA的每日心情
    开心
    22 小时前
  • 签到天数: 3751 天

    连续签到: 77 天

    [LV.Master]伴坛终老

    发表于 2017-2-21 11:54:06 | 显示全部楼层
    傲游截图20170221115257.jpg
    搞个0x3800做什么,没那么大的空间
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-2-23 17:29
  • 签到天数: 134 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2017-2-21 12:14:16 | 显示全部楼层
    toofree 发表于 2017-2-21 11:54
    搞个0x3800做什么,没那么大的空间

    那应该多少合适呢?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    22 小时前
  • 签到天数: 3751 天

    连续签到: 77 天

    [LV.Master]伴坛终老

    发表于 2017-2-21 13:29:22 | 显示全部楼层
    寂寞小帅 发表于 2017-2-21 12:14
    那应该多少合适呢?

    不好意思,我理解有误。从你的设置和对应的地址来看,对比了手册。
    0x1e00的单位是words,即乘以2后是字节地址,为0x3c00。

    你有没有bootloader代码呢?
    如果没有单独的代码,只有一个main函数的话,那么程序是这样的,上电后直接跳转到地址0x3c00开始执行程序。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    22 小时前
  • 签到天数: 3751 天

    连续签到: 77 天

    [LV.Master]伴坛终老

    发表于 2017-2-21 13:31:26 | 显示全部楼层
    具体什么情况,把你编译生成的 .hex文件看看
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-2-23 17:29
  • 签到天数: 134 天

    连续签到: 1 天

    [LV.7]常住居民III

     楼主| 发表于 2017-2-21 16:48:46 | 显示全部楼层
    toofree 发表于 2017-2-21 13:31
    具体什么情况,把你编译生成的 .hex文件看看

    你好,截图是我的.hex文件。我有个问题想请教下,不管是什么代码,烧写到bootloader区,上电执行bootloader区,只要不跳转回0000地址,不应该一直执行bootloader区的程序吗? 但事实上是程序跳转到bootloader区了,去没有执行,似乎是跑飞了。 想问下为什么程序烧到bootloader区了,去不能执行呢? 谢谢。
    6666.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    22 小时前
  • 签到天数: 3751 天

    连续签到: 77 天

    [LV.Master]伴坛终老

    发表于 2017-2-21 17:07:20 | 显示全部楼层
    给你个Leonardo的代码看看
    Leonardo-prod-firmware-2012-12-10.rar (9.13 KB, 下载次数: 10)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    22 小时前
  • 签到天数: 3751 天

    连续签到: 77 天

    [LV.Master]伴坛终老

    发表于 2017-2-21 17:13:05 | 显示全部楼层
    Arduino LEONARDO.rar (5.7 KB, 下载次数: 9)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-12-1 10:07
  • 签到天数: 1617 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2017-2-21 20:49:33 | 显示全部楼层
    你的熔丝配置到0x1E00 word,也就是0x3C00 byte,那你设置0x3800是干啥。

    从0x3800开始都是没有指令的,AVR会自动查找下一个地址的指令,到0x3C00后,你可以看到这里是一系列跳转指令,其实这里是中断向量表。因为你没有重新定义中断向量表,它又跳转到0x36,进入一个死循环了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-12-1 10:07
  • 签到天数: 1617 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2017-2-21 20:51:44 | 显示全部楼层
    AVR的bootloader有很多种,最简单的是AVR通用bootloader,Arduino的bootloader也不错。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 22:59 , Processed in 0.203423 second(s), 34 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.