搜索
bottom↓
回复: 4

马超老师、傻孩子老师、shaoziyang老师,大家好!请教一下,bootloader在avr studio(gcc)

[复制链接]

出0入0汤圆

发表于 2011-11-29 09:27:23 | 显示全部楼层 |阅读模式
马超老师、傻孩子老师、shaoziyang老师,大家好!请教一下,bootloader在avr studio(gcc)的环境下应该怎么配置呀?我用是mega128
这几天上网找了很多的资料也看了大家的讨论,ICC下的bootloader已经实现。但是avr studio(gcc)始终不行。
我主要代码如下,其中写flash代码是来自于http://www.nongnu.org/avr-libc/user-manual/group__avr__boot.html

unsigned char data1[]={…………………………………………};//这个是我希望用bootloader 写入的数组

void boot_program_page (uint32_t page, uint8_t *buf) //来源于avr-libc的范例
  {
    uint16_t i;
    uint8_t sreg;
   
    // Disable interrupts.

    sreg = SREG;
    cli();
   
    eeprom_busy_wait ();

    boot_page_erase (page);
    boot_spm_busy_wait ();     // Wait until the memory is erased.


   
    for (i=0; i<SPM_PAGESIZE; i+=2)
    {
        // Set up little-endian word.

        uint16_t w = *buf++;
        w += (*buf++) << 8;
     
        boot_page_fill (page + i, w);
    }

    boot_page_write (page);   // Store buffer in flash page.
    boot_spm_busy_wait();     // Wait until the memory is written.

    // Reenable RWW-section again. We need this if we want to jump back
    // to the application after bootloading.

    boot_rww_enable ();

    // Re-enable interrupts (if they were ever enabled).

    SREG = sreg;
  }


void main()//主函数,调用上面的函数,将数组写入对应的地址
{
……
address=0x0000;
boot_program_page(address,data1);
……
}

我的BOOTSZ1和BOOTSZ0都是取默认的0,即4096words, 32 pages;应用区0000~EFFF; boot:F000~FFFF直接在avr studio里面选好就行了。
同时BOOTRST也是默认,返回到0000;
另外,原来的帖子中写到需要在makefile 里面加上LDFLAGS = -Wl,-Map=$(TARGET).map,--cref,--section-start=工程名.text=0x1F000 但是这样不能写入。
或者,在memory 中设置memory:flash
                     name: 工程名.text
                     address: 0x1F000
也不成功。另外我尝试的地址有0x1e000也不行

lib中的代码应该是没问题的,我想请教大家,avr studio中具体的应该怎么设置啊?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2011-11-29 09:40:33 | 显示全部楼层
不好意思啊,马潮老师的名字打错了~~~

出0入0汤圆

 楼主| 发表于 2011-11-30 06:11:48 | 显示全部楼层
有会的朋友吗?可以QQ联系:374933900.我这急用

出0入0汤圆

 楼主| 发表于 2011-12-1 01:34:16 | 显示全部楼层
有大牛会吗?可付报酬,qq私聊:374933900

出0入0汤圆

 楼主| 发表于 2011-12-3 13:08:57 | 显示全部楼层
问题已经解决,上面的程序可以执行,问题出在project->configuration options->memory settings
点击 memory segments中add
第一个填“flash”
第二个填“.text”,这个表示是text
第三个填“0xfc00”,其实填其他的0xf800,0xf000都可以,但是注意要和熔丝位设置的一致才行

其实是老问题了,只是我是新手而已,呵呵,不好意思啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-23 00:20

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

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