OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2634|回复: 1

代码放在片外FLASH执行问题?? 求解~~感激不尽~~

[复制链接]

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2015-5-20
在线时间
13 小时
发表于 2016-9-21 14:26:25 | 显示全部楼层 |阅读模式
1金钱
MCU: ARM M3构架, 我外挂一颗FLASH芯片将部分代码段存放到此芯片里,执行时出现个问题.
片外FLASH 寻址空间起始地址:0x08000000
片内FLASH 寻址空间起始地址:0x10000000

函数A 代码段在片外FLASH (0x08000000)
函数B 代码段在片内FLASH (0x10001904)


函数A 内部调用到了函数B.
注:函数A 我在main函数里调用的.
代码如下:
unsigned char B(unsigned char t)
{
        return t+5;
}
__attribute__((section(".eflashtext"))) unsigned char A(unsigned char t)
{
        t = test_fnt(t);
        return t;
}

当我这样调用时,执行代码就死机了(估计跑飞了).

如果我吧函数B代码段也放在片外FLASH (0x08000000)里,调用就不会有问题.
请问大神们这个是什么原因呢?感激不尽!!!!!!!!!!!!!!!!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2015-5-20
在线时间
13 小时
 楼主| 发表于 2016-9-22 14:34:24 | 显示全部楼层

08000020:   push    {r0}
08000022:   ldr     r0, [pc, #8]    ; (0x800002c <__test_fnt_veneer+12>) //PC=0X008000022
08000024:   mov     r12, r0
08000026:   pop     {r0}
08000028:   bx      r12


08000022:   ldr     r0, [pc, #8]    ; (0x800002c <__test_fnt_veneer+12>) //?这里R0寄存器

这段执行完后R0寄存器 却没有发生改变 正常执行完这条指令 R0 = 0x10001905


代码段:
0x08000000  B082B580 4603AF00 79FB71FB F0004618 4603F807 79FB71FB 37084618 BD8046BD  .μ.°.ˉ.F&#251;q&#251;y.F.e.&#248;.F&#251;q&#251;y.F.7&#189;F.&#189;
0x08000020  4802B401 BC014684 BF004760 10001905 00000000 00000000 00000000 00000000  .′.H.F.&#188;`G.&#191;....................
0x08000040  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................

注: 代码在片外FLASH里(起始地址0x08000000), 片内FLASH(起始地址0x10000000)
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-29 08:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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