OpenEdv-开源电子网

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

Flash研究和讨论

[复制链接]

76

主题

355

帖子

0

精华

高级会员

Rank: 4

积分
671
金钱
671
注册时间
2012-9-19
在线时间
5 小时
发表于 2013-8-9 10:58:03 | 显示全部楼层 |阅读模式
放在FLASH里的东西肯定是码码,就是09 10 FF 32 AA;等这种的,那么一个程序放进去也是这样的;(这里说一下。由于keil优化特性,在程序里如果没有地方调用这个函数,那么他即使有定义,也不会烧到FLASH里);所以我写了个函数叫 LED_INIT();烧到地址为:0x0801f000;打开keil下有个文件叫xx.map(xx可能一个工程对应一个名字我也不知道,反正我的叫Template.map)这东西一看。发现我的LED_Init  地址是0x0801F001     thumb code   72;这里有个迷惑我截图给大家看:




看实际上从0x0801F000就有第一个函数的实际码码,08的出现了,而且数下来。这里的数并不是72个。而是80个;
然后呢,本次研究出的东西其实是指针强制成函数类型的运用:方法如下;

typedef void (*AA)(void); 定义一个这个类型的函数指针;然后
AAA AA;
AAA=(AA)(0X0801F000);//或者 AAA=(AA)(0X0801F001);
最后直接用:AAA(); 这样直接可以完成LED_INIT()的功能;

此次讨论内容为:既然存放到FLASH里的是码码,,我写个数组进去。同样的东西,,,然后用指针也调用。这样程序里可以不出现函数实体,可是失败了。。。。我写了一个结构体 BUF[80]={...};完全是按照我FLASH里的数写进去。可是AAA指针调用发现。跳到了其他地方。希望大神一起讨论研究。另外。。。我觉得我码码本身就是80个。虽然.map里截图看到是72个,但是我的这一页FLASH只有这个函数,我做过多次试验。放到其他空FLASH里,码码依然是80个。。。。这个地方有些没闹明白。难道是32单片机地址对齐的原因??

具有资深STM32点灯技术,
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-9 11:11:20 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

1446

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2256
金钱
2256
注册时间
2010-12-16
在线时间
206 小时
发表于 2013-8-9 11:17:05 | 显示全部楼层
你这个需要MMU支持.STM32没有这东西.
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-15 10:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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