Q:如何将一个变量、某个源文件的函数在编译阶段就存储在用户指定的区域?
【map文件】
对固件里面的变量、函数、常量等元素的存储空间进行分配的说明文件
全局的
》可以看到,全局变量是否占用数据空间取决于后续是否使用这个变量。
局部的
》可以看到,对于局部变量,无论是否加static修饰,仅仅声明未被使用的变量不会占用数据空间
》被static修饰的局部变量且后续被使用才会占用空间,未被static修饰的局部变量就算后续被使用也不会占用数据空间
PS:keil对于未初始化的数组,元素个数<9时算RW-data,元素个数大于8的算ZI-data
程序最终生成的固件空间大小取决于code、RO(只读数据)、RW(可读写数据)
2、被static修饰为全生命周期的局部变量也要后续使用才会占用空间。
【sct/icf文件】
将函数或变量添加到用户自定义区域(配合__attribute__ 编译特性使用)
》IAR界面
【__attribute__ 】
》可以看到,在指定的地址存储了用户需要提前存储的数据,加了packed关键字后存储空间明显缩小;对于结构体默认是以4字节对齐的方式调整
__attribute__((section(“func_name“)))
__attribute__((aligned(8))) 对齐方式
__attribute__((packed, aligned(8)))
原文地址:https://blog.csdn.net/u012358272/article/details/134640165
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_13529.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!