搜索
bottom↓
回复: 3

请问马老师MEGA128中引导区(BOOTLOAD)中bootloader为何会定时复位?

[复制链接]

出0入0汤圆

发表于 2009-11-11 16:31:39 | 显示全部楼层 |阅读模式
马老师,学习了您写的基于串口bootloader之后,根据需要自己写了一个基于CAN的bootloader程序,可是不知道为什么程序总是在执行固定时间后就重新执行(查看MCUCSR寄存器,其值为0x00,也不像是复位造成的),而把代码放到应用程序区就不会出现这种情况。谢谢解答

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

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

出0入0汤圆

发表于 2009-11-12 12:36:01 | 显示全部楼层
看不懂,什么代码放到应用程序区就不会出现这种情况?

出0入0汤圆

 楼主| 发表于 2009-11-12 13:49:49 | 显示全部楼层
意思也就是这段代码编译时Option中设置成Application,那样就可以发送CAN数据帧,而设置成Bootloader时则不断复位,无法发送CAN数据帧。具体代码(一些接口函数没有贴出来)如下:
void main(void)
{       
        int temp;
        int i;
        int LastFrmLen;
        int LastFrmLenMask=8;
        char tempRst;
        CanFrameDataType2   SendDataBuf,RcvDataBuf;
        //CanFrameDataType2   *tempBuf;
         unsigned char packNO = 1;
         int bufferPoint = 0;

       
        InitPort();

         TCCR0 = 0x00;    //stop tmr0
         UCSR0B = 0x00;   //disable usart0 while setting baud rate
         UCSR1B = 0x00;   //disable usart1 while setting baud rate

       
         Refresh_SFR();          //重置功能寄存器

        GPS_USART_INIT(9600);
       
        tempRst=0xFF;
        GPS_USART_TX_BYTE(tempRst);
        CanControllerInit();                    //can控制器初始化


       
        SendDataBuf.head.FrameInfo=FI_EFF|CAN_FRM_LEN;
        SendDataBuf.head.FrameSn=0x00;
        SendDataBuf.head.RxNodeId=BZQ_CAN_ID;
        SendDataBuf.head.TxNodeId=GPS_MACHINE_CAN_ID;
        SendDataBuf.head.Type_Cnt=0x00;                //贞类型
        SendDataBuf.cmd=TOBZQ_START;
       
        RcvDataBuf.cmd=0x00;                   //初始化接收帧命令  
       
        for( i=0;i<6;i++){
                SendDataBuf.Data='c';                  //初始化发送第一帧数据
                }
        temp=crc8(SendDataBuf.Data,7);
        SendDataBuf.crc8=temp;
        //发送触发数据帧
        //CanWriteData((uint8 *)&SendDataBuf);
       
        while(1){
                tempRst=MCUCSR;
                MCUCSR = 0x00;                                 
                GPS_USART_TX_BYTE(tempRst);                      //通过串口对MCUSR寄存器进行监视,查看复位原因
                while(QueryCanTxCondition()==0);                 //CAN通过检测

               
                //delay_ms(10);
                CanWriteData((uint8 *)&SendDataBuf);            //发送CAN帧
                tempRst=MCUCSR;
                delay_ms(10);
                GPS_USART_TX_BYTE(tempRst);
                }


        // START_FMQ_OUT();                           //蜂鸣器响
        //CanErrorProcess();                 //can错误处理
    asm("jmp 0x0000\n");        //跳转到Flash的0x0000处,执行用户的应用程序

}

程序刷入,在应用区可以发送出CAN帧,在BOOT区就没有CAN帧送出。

串口检测结果为:

FF 07 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00 FF 00 00 00

出0入0汤圆

 楼主| 发表于 2009-11-12 13:52:49 | 显示全部楼层
在死循环中仅执行一圈半,查看MCUCSR寄存器,其值为0x00,看来也不是复位造成的,不知道是什么原因造成其重新执行。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-23 04:16

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

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