Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 不确定这行代码的作用。(ARM嵌入式软件)_C_Embedded_Arm - Fatal编程技术网

C 不确定这行代码的作用。(ARM嵌入式软件)

C 不确定这行代码的作用。(ARM嵌入式软件),c,embedded,arm,C,Embedded,Arm,我最近在一些嵌入式软件中遇到了这行C代码,但我从未见过这种语法。我相信这与在未初始化的内存中存储某些内容有关(但我可能完全错了) 还有 #### #define DEF 100 char SomeName[DEF] @ ".noinit"; 有人吗?这似乎是/section/segment规范中位置的变体。Pragmas通常用于此。代码的意思可能是“链接器,将其放在.noinit…节中,链接器脚本将其放在未初始化的内存节中)它是特定于编译器的扩展(可能是IAR EWARM编译器?)用于在特定

我最近在一些嵌入式软件中遇到了这行C代码,但我从未见过这种语法。我相信这与在未初始化的内存中存储某些内容有关(但我可能完全错了)

还有

#### #define DEF 100

char SomeName[DEF] @ ".noinit";

有人吗?

这似乎是/section/segment规范中位置的变体。Pragmas通常用于此。代码的意思可能是“链接器,将其放在.noinit…节中,链接器脚本将其放在未初始化的内存节中)

它是特定于编译器的扩展(可能是IAR EWARM编译器?)用于在特定链接器节中定位变量。这不是标准的C-不同的编译器提供了不同的方法来执行类似的操作。它也可以用于定位特定的地址。毫无疑问,您将详细说明。

对于没有内容的节(零初始化节),情况正好相反 链接器在应用程序启动时安排所有此类节的零初始化,但 对于do not initialize指令中提到的那些
.noinit
节在do not initialize指令中指定,但您可以添加 任何您喜欢的零初始化部分,并直接控制它们的时间和方式 节已初始化


如果您阅读的代码是要用IAR ARM编译器编译的,请阅读以下摘录

  • 节的@运算符和#pragma位置指令 安置
使用@operator或#pragma location指令 将函数组或全局变量和静态变量放入命名 节,而没有对每个对象的显式控制 例如,可以放置在内存的特定区域,或者 使用“开始”和“复制”部分以受控方式初始化或复制 端点运算符。如果您希望在 单独链接的单元,例如应用程序项目和引导 加载器项目。在绝对控制 单个变量的放置不是必需的,也不是有用的


指针和数组都将被放置在内存的no init部分。也就是说,启动代码不会麻烦初始化这些变量,因此程序第一次访问它们时,它们会(可能会)包含垃圾值。

欢迎使用堆栈溢出。请尽快阅读此页。符号是非标准的。您需要查看您正在使用的编译器的手册,或者您打算使用的软件的手册。似乎出于某种原因,数据应该未初始化-可能代码会设置va但是详细的语义只能在相关的编译器手册中找到。编译器名称是什么?
#### #define DEF 100

char SomeName[DEF] @ ".noinit";