社区
单片机/工控 帖子详情 如何将一个全局变量写到FLASH的固定位置上? areswry 2010-05-17 12:36:24 准备定义一个全局变量,内容为"1234567890",放在FLASH的某个地址上,如0x1b00。我希望是程序编译完后,生成的hex文件转换成bin文件之后,在0x1b00位置上,就有这串数据写在里头。这个要如何操作呢。
...全文
1559 9 打赏 收藏 如何将一个全局变量写到FLASH的固定位置上? 准备定义一个全局变量,内容为"1234567890",放在FLASH的某个地址上,如0x1b00。我希望是程序编译完后,生成的hex文件转换成bin文件之后,在0x1b00位置上,就有这串数据写在里头。这个要如何操作呢。 复制链接
扫一扫 分享 转发到动态 举报 AI 作业
写回复 配置赞助广告取 消
确 定
用AI写文章 9 条回复 切换为时间正序 请发表友善的回复… 发表回复 打赏红包 需支付: 0.00 元 取 消 确 定 cecwxf 2012-11-09 打赏举报 回复 确实如此 。。。。 Great_Bug 2010-05-24 打赏举报 回复 [Quote=引用 1 楼 areswry 的回复:]
unsigned char *gUc= (unsigned char *)0x1b00;
这种写法可以使得gUc指向0x1b00。可以通过它将固定地址写入某串数据,但只能在程序运行的时候写入吧,我是希望程序编译完成后0x1b00就有指定的数据串。
[/Quote]
这种方法不安全. 因为LINKER无法为你保留这个地址,它可能把这个地址分配给某段代码. sherlock_lai 2010-05-24 打赏举报 回复 [Quote=引用 1 楼 areswry 的回复:]
unsigned char *gUc= (unsigned char *)0x1b00;
这种写法可以使得gUc指向0x1b00。可以通过它将固定地址写入某串数据,但只能在程序运行的时候写入吧,我是希望程序编译完成后0x1b00就有指定的数据串。
[/Quote]
有的FLASH烧写工具有这样的功能,可以直接对FLASH进行读写。
另外,楼主你的这种方法也是可以的,你可以先运行一段只有对FLASH进行写操作的程序,然后FLASH里不就有数据了么。你下次烧其他程序,只要指定编译器的MAP文件,不要关联到上次写的FLASH地址,那么之前写的这些数据不会重新初始化的。 beyondjdg 2010-05-23 打赏举报 回复 必须让链接器将变量链接到这个地址!
例如:在ARM上,可以通过Scatter File指定~呵呵~
你那样做,有用处吗?还是只想玩一玩? areswry 2010-05-17 打赏举报 回复 刚听同事说需要用汇编来搞。。。汗,C不能做么? areswry 2010-05-17 打赏举报 回复 没思路了喔~~~ areswry 2010-05-17 打赏举报 回复 [Quote=引用 2 楼 veabol 的回复:]
生产的时候可以通过编程器将这个数据和代码数据一起烧录进去,调试的时候你就暂时用代码写写吧,或者是调试的时候使用什么样的方法烧录代码进去,你也可以用同样方法将有这样数据的一个BIN文件烧录进去。
[/Quote]
额~那还是比较麻烦的喔。生产之前还要修改BIN文件。编译器不知道是否有这样子的功能,再输出的时候在HEX里面增加这样一条记录。然后hex2bin的时候,就没问题了。 博说医械研发 2010-05-17 打赏举报 回复 生产的时候可以通过编程器将这个数据和代码数据一起烧录进去,调试的时候你就暂时用代码写写吧,或者是调试的时候使用什么样的方法烧录代码进去,你也可以用同样方法将有这样数据的一个BIN文件烧录进去。 areswry 2010-05-17 打赏举报 回复 unsigned char *gUc= (unsigned char *)0x1b00;
这种写法可以使得gUc指向0x1b00。可以通过它将固定地址写入某串数据,但只能在程序运行的时候写入吧,我是希望程序编译完成后0x1b00就有指定的数据串。 STM32全局变量的程序存储空间占用问题 在嵌入式系统开发中,特别是使用STM32微控制器的项目中,全局变量是常用的数据存储方式之一。在实际开发中,开发者应该合理设计全局变量的使用,减少数量和大小,以优化程序存储空间的利用效率。使用节省存储空间的数据类型:在某些情况下,可以使用较小的数据类型来代替较大的数据类型,以减少全局变量的大小。减少全局变量的数量和大小:合理设计变量的作用域,尽量将变量定义在局部作用域中,避免过多的全局变量。在STM32中,整型变量的大小通常为4个字节,字符型变量的大小为1个字节。将占用4个字节的程序存储空间,而。 如何让静态局部和全局变量或数组存在指定地址的Flash 近来很多人都在关心数据存放的问题,如果在熟悉编译环境的情况下,要想在Flash(ROM)里面存放变量或数组值是很容易的。但是产品开发者重在应用程序的开发和产品的研发,编译器是一个工具,要是在这个上面花很多时间的话,市场有可能已经被别人抢占了。所以我不建议他们去深入编译环境,只要能用就行。所以我在这里给大家推荐一种方法:可以让变量或数组存放在Flash区,而且存放的起始地址和存放的空间大小是可控的, 【转载】关于全局变量的一些注意事项 一直听说不要大量使用全局变量,但是全局变量用的太舒服了…
不过慢慢写的代码多了,就出现问题,全局变量太多,代码都缺乏艺术感了…
同时也会造成一些未知错误(水平太低,有时碰到一些莫名奇怪的问题),然后我将那个全局变量改掉,就没了…
总之使用太多全局变量容易出现问题,下面是我转载一位大佬对全局变量的一些理解,特立贴收藏:
http://blog.chinaunix.net/uid-20620288-id-3399952.html
/**************************************** 在c语言中全局变量的作用域,深入探讨C语言中局部变量与全局变量在内存中的存放位置... C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register)1.局部变量和全局变量在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于形参变量,C语言中所有的量都有自己的作用域。变量说明的方式不同,其作用域也不同。... Ubuntu全局变量、局部变量、堆、栈 目录
一、全局变量和局部变量
二、堆栈概念
2.1STM32中的堆栈
2.2程序的内存分配
2.3stm32数据的存储位置
三、Ubuntu系统中编程验证
3.1 添加代码
3.2 编译运行代码
四、STM32(Keil)编程验证
4.1keil 环境下默认的内存配置说明
4.2实际运行情况
五、运行结果
总结
参考文献
一、全局变量和局部变量
全局变量
在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默...
单片机/工控
27,511
社区成员
28,797
社区内容
发帖 与我相关 我的任务 单片机/工控 硬件/嵌入开发 单片机/工控 复制链接
扫一扫 分享 确定 社区描述 硬件/嵌入开发 单片机/工控 社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告 试试用AI创作助手写篇文章吧
+ 用AI写文章