C 不确定这行代码的作用。(ARM嵌入式软件)
我最近在一些嵌入式软件中遇到了这行C代码,但我从未见过这种语法。我相信这与在未初始化的内存中存储某些内容有关(但我可能完全错了) 还有C 不确定这行代码的作用。(ARM嵌入式软件),c,embedded,arm,C,Embedded,Arm,我最近在一些嵌入式软件中遇到了这行C代码,但我从未见过这种语法。我相信这与在未初始化的内存中存储某些内容有关(但我可能完全错了) 还有 #### #define DEF 100 char SomeName[DEF] @ ".noinit"; 有人吗?这似乎是/section/segment规范中位置的变体。Pragmas通常用于此。代码的意思可能是“链接器,将其放在.noinit…节中,链接器脚本将其放在未初始化的内存节中)它是特定于编译器的扩展(可能是IAR EWARM编译器?)用于在特定
#### #define DEF 100
char SomeName[DEF] @ ".noinit";
有人吗?这似乎是/section/segment规范中位置的变体。Pragmas通常用于此。代码的意思可能是“链接器,将其放在.noinit…节中,链接器脚本将其放在未初始化的内存节中)它是特定于编译器的扩展(可能是IAR EWARM编译器?)用于在特定链接器节中定位变量。这不是标准的C-不同的编译器提供了不同的方法来执行类似的操作。它也可以用于定位特定的地址。毫无疑问,您将详细说明。对于没有内容的节(零初始化节),情况正好相反 链接器在应用程序启动时安排所有此类节的零初始化,但 对于do not initialize指令中提到的那些
.noinit
节在do not initialize指令中指定,但您可以添加
任何您喜欢的零初始化部分,并直接控制它们的时间和方式
节已初始化
如果您阅读的代码是要用IAR ARM编译器编译的,请阅读以下摘录
- 节的@运算符和#pragma位置指令 安置
指针和数组都将被放置在内存的no init部分。也就是说,启动代码不会麻烦初始化这些变量,因此程序第一次访问它们时,它们会(可能会)包含垃圾值。欢迎使用堆栈溢出。请尽快阅读此页。符号是非标准的。您需要查看您正在使用的编译器的手册,或者您打算使用的软件的手册。似乎出于某种原因,数据应该未初始化-可能代码会设置va但是详细的语义只能在相关的编译器手册中找到。编译器名称是什么?
#### #define DEF 100
char SomeName[DEF] @ ".noinit";