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

2019-07-21 04:43发布

我就怎么定义了一句 [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里了
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
正点原子
1楼-- · 2019-07-21 09:28
你看的是:Keybuffer 指向的地址,而不是Keybuffer 本身的地址。
你看Keybuffer ,就用&Keybuffer 来查看。
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-21 11:17
回复【3楼】光圈电子科技-晓航-多多实验室:
---------------------------------
不可能。
Keybuffer 指向新的数据就是新的地址了。这个我用过不知道多少次了。。。

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

[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经验证可用

回复【4楼】正点原子:
---------------------------------
我也觉得奇怪啊,很普通的一个变量,就是无法赋值,memcpy没有作用,地址指向Flash,根本查不到数据
正点原子
6楼-- · 2019-07-21 17:02
回复【5楼】光圈电子科技-晓航-多多实验室:
---------------------------------
你是不是代码开启了-O2优化?

一周热门 更多>