打印
[AVR单片机]

atmega32的bootloader问题,请大神帮忙指点指点

[复制链接]
990|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我通过下面这个软件作为bootloader的上位机
编译工具是最新版avrstudio(atmelstudio 6)

我是这样操作的
首先生成hex,然后通过上位机烧写程序,上位机提示烧写成功,然后烧写的程序未运行。

下面是主程序:
int main(void)
{
        int i=0,bufferPoint=0;
        DataUnionByte crc;
        unsigned char timercount=0,packNO=1;
       
        cli();
       
        USARTInit(19200);
        TimerInit();
       
        for (;;)
        {
                if (USARTRecieveFind()=='d'){break;}
                else if(USARTRecieveFind()=='e')
                {
                        USARTTransmit('e');run_app();
                }
                if ( TIFR&0X02 )
                {
                        TIFR |= 0X02;                /* 清除标志 */
                        if(timercount++ >= 200)
                        {
                                USARTTransmit('e');
                                run_app();
                        }
                }
        }
        for (;USARTRecieveFind()!=XMODEM_SOH;)
        {
                if (TIFR&0X02)
                {
                        TIFR |= 0X02;
                        if (++timercount > 67)
                        {
                                USARTTransmit(XMODEM_RECIEVING_WAIT_CHAR);
                                timercount = 0;
                        }
                }
        }
        for (unsigned char temp=0;temp!=XMODEM_EOT;temp=USARTRecieve())
        {
                if ((packNO == USARTRecieve())&&(packNO==(USARTRecieve()^0XFF)))
                {
                        for(i=0;i<128;i++)
                        {
                                databuff.databuff8[bufferPoint++]=USARTRecieve();
                        }
                        crc.databuff8[1] = USARTRecieve();
                        crc.databuff8[0] = USARTRecieve();
                        if (CRCCalculate(&databuff.databuff8[bufferPoint-128],128)==crc.databuff16)
                        {
                                if(bufferPoint >= DATA_BUFFER_SIZE)
                                {
                                        boot_write_one_page();
                                        address += DATA_BUFFER_SIZE;
                                        bufferPoint = 0;
                                }
                                USARTTransmit(XMODEM_ACK);
                                packNO++;
                        }
                        else
                        {
                                USARTTransmit(XMODEM_NAK);
                        }
                }
                else
                {
                        USARTTransmit(XMODEM_NAK);
                }
        }
        USARTTransmit(XMODEM_ACK);
        if(bufferPoint) boot_write_one_page();
       
        run_app();
}
run_app();就是跳到0x0000的程序,代码就一条  jmp 0x0000

请问一下哪里有问题吗,为什么通过bootloader下载的程序不能运行。

可以确定烧进去的程序是正确的,因为我通过读FLASH看过。

相关帖子

沙发
s17701332| | 2015-4-29 17:16 | 只看该作者
程序存在bootloader区了么

使用特权

评论回复
板凳
wakojosin|  楼主 | 2015-4-29 20:57 | 只看该作者
解决了,是烧写的程序跟bootloader程序有冲突,也是bootloader的一个bug,现在解决了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

79

帖子

0

粉丝