OpenEdv-开源电子网

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

Keil STM32F407IGT6 局部和全局变量被分配到Flash里

[复制链接]

25

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2014-7-16
在线时间
5 小时
发表于 2014-10-5 21:08:25 | 显示全部楼层 |阅读模式
5金钱

我就怎么定义了一句

[mw_shl_code=c,true]char* Keybuffer = "";[/mw_shl_code]

使用时发现无法memcpy,单步调试发现该变量内存地址在0x08000A00(Flash里),真是怪事了。

另外一个工程里写有

[mw_shl_code=c,true]char buffer[3];[/mw_shl_code]


可以被正确memcpy,但是将该语句复制到这个程序也不行...全局和局部变量都不行。

两个工程除了main是不一样的,其他都是一样的

到底是怎么回事,不是会自动分配堆栈空间的吗,怎么跑到Flash里了

光圈电子科技 晓航 多多 啾儿 实验室
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-10-5 23:06:20 | 显示全部楼层
你看的是:Keybuffer 指向的地址,而不是Keybuffer 本身的地址。
你看Keybuffer ,就用&Keybuffer 来查看。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

25

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2014-7-16
在线时间
5 小时
 楼主| 发表于 2014-10-5 23:19:28 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
但是这个变量无法正常使用啊?
光圈电子科技 晓航 多多 啾儿 实验室
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-10-5 23:24:54 | 显示全部楼层
回复【3楼】光圈电子科技-晓航-多多实验室:
---------------------------------
不可能。
Keybuffer 指向新的数据就是新的地址了。这个我用过不知道多少次了。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

25

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2014-7-16
在线时间
5 小时
 楼主| 发表于 2014-10-5 23:25:52 | 显示全部楼层

我在另一个程序里声明的变量也不能正常使用

[mw_shl_code=c,true]unsigned short InData; unsigned short OutData;[/mw_shl_code]

这两个是局部变量,一旦给他们赋值,程序就跑飞无法调试。

调试时发现之前的有一句

[mw_shl_code=c,true]InData = GUI_GetTime();[/mw_shl_code]

这句执行后,InData的地址竟然仍然没有被分配,查到是0x00000000

后面执行了

[mw_shl_code=c,true]*(__IO uint16_t*)(Address) = InData; OutData = *(__IO uint16_t*)(Address);[/mw_shl_code]
当给OutData赋值时,程序跑飞,但外部SRAM经验证可用

光圈电子科技 晓航 多多 啾儿 实验室
回复

使用道具 举报

25

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2014-7-16
在线时间
5 小时
 楼主| 发表于 2014-10-5 23:26:56 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
我也觉得奇怪啊,很普通的一个变量,就是无法赋值,memcpy没有作用,地址指向Flash,根本查不到数据
光圈电子科技 晓航 多多 啾儿 实验室
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-10-5 23:42:02 | 显示全部楼层
\回复【5楼】光圈电子科技-晓航-多多实验室:
---------------------------------
你是不是代码开启了-O2优化?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

25

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2014-7-16
在线时间
5 小时
 楼主| 发表于 2014-10-6 10:01:11 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
-O0优化,已经关闭时间优化
光圈电子科技 晓航 多多 啾儿 实验室
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-10-6 10:37:38 | 显示全部楼层
回复【8楼】光圈电子科技-晓航-多多实验室:
---------------------------------
那这样可以得到很好的仿真结果了
比较奇葩,你用个最少代码量的工程,测试下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

25

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2014-7-16
在线时间
5 小时
 楼主| 发表于 2014-10-6 10:53:25 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
不成,随便声明一个计数用的变量,都能跑到0x08001170上面去
光圈电子科技 晓航 多多 啾儿 实验室
回复

使用道具 举报

25

主题

114

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
252
金钱
252
注册时间
2014-7-16
在线时间
5 小时
 楼主| 发表于 2014-10-6 15:11:13 | 显示全部楼层
可能是MDK版本不兼容?
最新版的MDK里面有这样的说明
Note: The STM32 Device Family acks Version 1.x.x are incompatible with CMSIS Version 4.2.0 and MDK-Middleware Version 6.1.1. 

 The compatible STM32 Device Family acks Version 2.x.x will be released shortly. 

换回5.11a试试先
光圈电子科技 晓航 多多 啾儿 实验室
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 22:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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