【问题标题】:How do I create an array of static volatile structs in C?如何在 C 中创建静态 volatile 结构数组?
【发布时间】:2015-10-14 12:27:51
【问题描述】:

正如标题所说,我接手的一个项目有一个静态 volatile 结构,它在连接到 WiFi 网络时基本上保存网络数据。我需要创建这些结构的数组来保存以前网络的数据。

这就是我要复制的结构的样子:

static volatile struct
{
    BYTE        MySSID[32]; 
    BYTE        SsidLength;             
    BYTE        SecurityMode;           
    BYTE        SecurityKey[32];           
    BYTE        SecurityKeyLength;
    BYTE        dataValid;
    BYTE        networkType;
    BYTE        IsLinked;
    BYTE        ConnectionID;
} NetworkStruct;

这是我最近一次失败的尝试创建一个数组,我可以将这个结构中的数据复制到:

static volatile struct
{
    BYTE        MySSID[32]; 
    BYTE        SsidLength;             
    BYTE        SecurityMode;           
    BYTE        SecurityKey[32];           
    BYTE        SecurityKeyLength;
    BYTE        dataValid;
    BYTE        networkType;
    BYTE        IsLinked;
    BYTE        ConnectionID;
} SavedNetworks[10];

到目前为止,此尝试和其他所有尝试都会引发错误。

这是上述尝试引发的错误:

链接错误:无法分配节 .nbss,大小 = 944 字节, 属性 = bss 附近
链接错误:无法分配数据内存

【问题讨论】:

  • 出于好奇,这是什么系统?裸机微控制器?哪一个?
  • volatile 对您的阵列毫无意义。为了使事情正确,将您的struct 声明为真实类型(没有volatile),将您的一个受未知更改影响的变量声明为易失性,并声明您的数组没有volatile。而且,为什么你希望你的数组是static?也许只是你函数中的一个局部变量就足够了?
  • 这是一个 PIC 微控制器。抱歉,我对 C 比较陌生,可能不完全理解 volatile 的工作原理,所以我正在研究解决这个问题。我基本上只是复制第一个结构(我没有编写)的格式,因为这段代码的重点是,每当模块成功连接到网络时,我都需要将详细信息添加到已保存网络的列表中。如果模块无法连接到网络超过 10 分钟,它会在重置之前花费 5 分钟尝试连接到每个已保存的网络。

标签: c arrays struct static volatile


【解决方案1】:

链接错误:无法分配节 .nbss,大小 = 944 字节

链接器未能为 .bss 部分中的数组分配所需的内存,这是所有未初始化的静态存储持续时间变量所在的位置。您为静态/全局变量使用了太多内存,就这么简单。

如何解决取决于具体的系统。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多