嵌入式开发中静态区占用过大导致的问题及解决办法


暑假学校组织的实习实训,我选了嵌入式组。


做的是一个输油管道监测系统,就是检测实时数据,有异常值时报警的一个小系统。

7月1号开始做,今天20号,其实就快做完了。来自网络、触摸屏、键盘的数据都处理好了,就差最后一步,把处理好的数据显示在界面上。

因为要用到中文显示,所以特意加了一个中文的unicode码表,用来把char*型的字符串转换为Unicode字符串。码表就是一个二维数组。不过比较大,四万多个元素。生成的bin文件从180K飙升到了260K。

随后比较奇怪的事情发生了。当我使用了unicode码表的时候,系统运行时,本来满屏的图片下边无缘无故多出了一条黑边。更奇怪的是,这还是在我调用字符串转换的那段代码都没执行到的情况下发生的。


想了各种各样的方法,也解决不了这个问题,几乎都快放弃了,不显示中文了。


后来想到了,可能是生成的bin文件太大了吧。可是那能怎么办呢?毕竟那是码表啊,又不是一般的数组。



实在无解了,于是去请教老师。

老师看了看每个.c文件生成的目标文件,又看了看码表。在码表数组前面加了一个const去修饰。

再运行,正常了。



我意识到了是const的作用,但还是没明白,那个码表本身就是全局变量,加不加const,不都是全局变量吗?

老师给我解释说,不加const,这个数组是存储在静态区的,加上const后,这个数组变成了常量数组,就从静态区挪到了代码区。之前的问题应该是静态区空间不足,导致本应在静态区存储的数据占用了屏幕显示的内存。


实在是太难想象了。原来嵌入式系统中会出现这样的问题。平时在PC机上编程,根本都没有考虑哪个变量在哪个区存储,会占用多大的空间。

这真是生动的一课。以后对待程序和代码的管理,一定要更加严谨才是!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值