Cortex M0+ 在为特定类型定义的结构赋值时开始抛出硬故障

问题描述 投票:0回答:1

我遇到了一个奇怪的问题:有一些代码我已经工作了几个月,没有出现任何问题(好吧,不是这个问题)。但突然间,将值分配给位于特定文件中的 typedef 结构中的任何结构成员会导致硬故障(不可恢复)。当我的 IDE 中的故障掩码寄存器到达硬故障处理程序时,其值为“0”。该 typedef 在头文件中声明,并在源文件中声明它的实例。

这是一个很大的结构,所以考虑到可能是一些失控的内存问题创建了堆栈/堆问题,我在同一个头文件中创建了另一个只有一个成员(uint8_t,又名字节)的结构。同样的问题:尝试为 uint8_t 分配一个值(例如 32)会导致处理器故障。

我在整个代码中以完全相同的方式声明了 typedef 结构,其中许多结构在有问题的结构之前被访问,没有任何问题。该问题仅发生在这一个源文件/标头组合中。

我正在努力思考会导致这种情况的原因或下一步该去哪里寻找。大家有什么想法吗?

Globals.h

typedef struct TestGlobWord_
{
    uint8_t GlobWord;
} TestGlobWord;

MyFile.c

TestGlobWord* GbobalWord = NULL;

void MyFunc(void)
{
    GbobalWord->GlobWord = 32;
}
struct typedef cortex-m
1个回答
0
投票

我不确定您真正打算做什么,特别是因为您说您已经编写了相当多的代码,并且这些问题通常很早就会出现。

诸如

TestGlobWord* GlobalWord = NULL;
(注意
*
!)之类的声明声明了一个指向 TestGlobWord 类型实例的
指针
,但不为其分配任何内容 (
= NULL
)。因此使用该指针将引发错误。要初始化指向某些内容的指针,您可以尝试:

void MyFunc(void)
{
    GlobalWord = new TestGlobWord();
    GlobalWord->GlobWord = 32;
}

或者,要直接创建全局实例,请将代码更改为:

TestGlobWord GbobalWord; // NO star

void MyFunc(void)
{
    GbobalWord.GlobWord = 32; // Note that you now need to use the dot here to access the field
}
© www.soinside.com 2019 - 2024. All rights reserved.