野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 24081|回复: 4

做cortex m0 的IAP升级时遇到奇怪问题?

[复制链接]
发表于 2013-11-8 17:08:25 | 显示全部楼层 |阅读模式
下面的代码 是运行在flash的第一个段 作用只是根据标志区地址来跳转到不同的区域

int main(void)
{

        if(IAP_ProCur == PROGRAM_LOW)
        {
                UserProgram = (void (*)()) (PROGRAM_LOW + 1);
                __disable_irq();
                (*UserProgram)();
        }
       

        if(IAP_ProCur == PROGRAM_HIGH)
        {
                UserProgram = (void (*)()) (PROGRAM_HIGH + 1);
                __disable_irq();
                (*UserProgram)();       
        }
}


现在的问题是,我同一个程序 通过 Target 设置IROM 地址0x1000 (PROGRAM_LOW,即为低区首地址) 编译后下载程序后能跳转也能很好运行;
但是,当 Target 设置IROM 地址0x4000 ( PROGRAM_HIGH,即为高区首地址 ) 编译后下载程序无法跳转,更不用说运行高区的程序;
当然了 对程序都进行了中断重映射!
调试后发现当IAP_ProCur  为 PROGRAM_HIGH 时运行到    (*UserProgram)();        这一句时直接进入HardFault_Handler中断死掉了,
查看flash区内,高区和低区数据,除了固定偏移地址不同外其他全是一样,不明白,
谁遇到过?

回复

使用道具 举报

发表于 2013-11-9 10:24:14 | 显示全部楼层
帮你顶下哈!!
回复 支持 反对

使用道具 举报

发表于 2013-11-9 11:33:35 | 显示全部楼层
这个,估计的 汇编 单步 调试,才容易找到 问题咯,PC 执行的代码,是否 空间溢出?或者 空白区域?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-9 19:52:30 | 显示全部楼层
进入 HardFault_Handler 中断 后 查看 R13(SP) 值为 0x10000840   查看memory 0x10000840 地址处的值

那么中断前将要执行的语句 地址为 0x000001CF    问题来了 执行的地址 不应该是奇数啊 在汇编窗口中也找不到 这个地址所对应的代码

有什么好办法查找问题呢?
QQ截图20131109194544.png
QQ图片20131109194510.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-9 19:54:22 | 显示全部楼层
编写很简单的LED灯 也是这样 0x4000以上的地址无法跳转过去  
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-1 09:27 , Processed in 0.032271 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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