搜索
bottom↓
回复: 8

基于CAN总线的IAP功能

[复制链接]

出0入0汤圆

发表于 2015-12-18 14:26:40 | 显示全部楼层 |阅读模式
我用STM32F107VC实现CAN总线的IAP功能,这款芯片是64K内存,256K闪存,

通过CAN总线已经正常接收到约8K左右的应用程序,保存在CAN_firmware_RX[20*1024],并把程序正常写入到0X08010000这个地址中,

u8 Update_firmware_RX[Update_FIR_LEN] __attribute__ ((at(0X20001000)));

在仿真器中已经能在0X08010000地址中看到这个程序,应用程序是个LED闪灯的程序;

然后我用iap_load_app(FLASH_APP2_ADDR);FLASH_APP2_ADDR=0X08010000;准备跳转到flash程序的时候,程序跑飞,

void iap_load_app(u32 appxaddr)
{
        if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)        //¼ì²éÕ»¶¥µØÖ·ÊÇ·ñºÏ·¨.
        {
//                jump2app=(iapfun)*(vu32*)(appxaddr+4);                //Óû§´úÂëÇøµÚ¶þ¸ö×ÖΪ³ÌÐò¿ªÊ¼µØÖ·(¸´Î»µØÖ·)               
//                jump2app=(iapfun)*(vu32*)0x08005004;
                jump2app=(iapfun)(appxaddr);
                MSR_MSP(*(vu32*)appxaddr);                                        //³õʼ»¯APP¶ÑÕ»Ö¸Õë(Óû§´úÂëÇøµÄµÚÒ»¸ö×ÖÓÃÓÚ´æ·ÅÕ»¶¥µØÖ·)
                jump2app();                                                                        //Ìøתµ½APP.
        }       
}       

仿真后发现,程序执行到jump2app();时,程序跑飞,

哪位遇到过,给点建议啊,不胜感谢。。。

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2015-12-18 14:50:13 | 显示全部楼层
刚刚发的程序错了,实际程序是这样的:
void iap_load_app(u32 appxaddr)
{
        if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)        //¼ì²éÕ»¶¥µØÖ·ÊÇ·ñºÏ·¨.
        {
                jump2app=(iapfun)*(vu32*)(appxaddr+4);                //Óû§´úÂëÇøµÚ¶þ¸ö×ÖΪ³ÌÐò¿ªÊ¼µØÖ·(¸´Î»µØÖ·)               
                MSR_MSP(*(vu32*)appxaddr);                                        //³õʼ»¯APP¶ÑÕ»Ö¸Õë(Óû§´úÂëÇøµÄµÚÒ»¸ö×ÖÓÃÓÚ´æ·ÅÕ»¶¥µØÖ·)
                jump2app();                                                                        //Ìøתµ½APP.
        }        
}  

还是在 jump2app();  处跑飞

出0入10汤圆

发表于 2015-12-18 15:48:03 | 显示全部楼层
注意关闭全局中断,跳转到新的程序之后再开。

出0入0汤圆

 楼主| 发表于 2015-12-18 15:58:35 | 显示全部楼层
10xjzheng 发表于 2015-12-18 15:48
注意关闭全局中断,跳转到新的程序之后再开。

不会啊,程序里就开了一个CAN中断,如果不开中断的话,怎么接受数据包呢,何谈更新flash应用程序

出0入10汤圆

发表于 2015-12-18 15:59:48 | 显示全部楼层
jmldxningk 发表于 2015-12-18 15:58
不会啊,程序里就开了一个CAN中断,如果不开中断的话,怎么接受数据包呢,何谈更新flash应用程序 ...

跳转之前关闭掉中断。

出0入0汤圆

 楼主| 发表于 2015-12-18 16:21:04 | 显示全部楼层
10xjzheng 发表于 2015-12-18 15:59
跳转之前关闭掉中断。

试过了,跳转之前价格两句:
        CAN_ITConfig(CAN2,CAN_IT_FMP0 | CAN_IT_FF0 | CAN_IT_FOV0,DISABLE);//FIFO0ÖжÏ.               
          CAN_ITConfig(CAN2,CAN_IT_RQCP0 | CAN_IT_RQCP1 | CAN_IT_RQCP2,DISABLE);

还是跑飞啊,

出0入0汤圆

发表于 2015-12-18 16:33:53 | 显示全部楼层
你的APP主函数是怎样的,在中断向量表有没有偏移,中断向量偏移函数前面有没有定义其他变量

出0入0汤圆

发表于 2020-7-5 18:25:08 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2020-7-5 19:58:36 | 显示全部楼层
很好的资料,学习下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 03:38

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

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