小编get*_*ter的帖子

未配置时STM32 WWDG中断触发

由于许可证问题,我有一个应用程序,我从Keil IDE移植到使用GNU工具链构建.我已经成功地能够在设备上设置,构建,刷新和运行应用程序.

GNU端的应用程序由于某种原因被卡在WWDG的弱链接IRQ处理程序中,这是一个无限循环.应用程序未启用WWDG,默认情况下在重置时禁用.我还验证了配置寄存器的默认启动值.

除编译器之外,唯一的区别是链接器和启动文件.但是,两个工具链使用的启动文件和链接器文件都是STM生成的默认值.

知道可能导致这种情况的原因吗?我在这里结束了我的智慧.

使用stm32f103XX,让我知道是否有任何其他信息会有所帮助.

编辑:使用下面的评论,我能够确定它实际上是正在被触发的HardFault_Handler.如果可能有帮助,我已经在下面包含了回溯输出

GDB BT:

0 HardFault_Handler()

1(信号处理程序调用)

2 0x720a3de在?? ()

3 foo(0x80005534)

Backtrace已停止:前一帧与此帧相同(损坏的堆栈?)

2件事对我来说很突出,虽然我没有gdb专家.1)foo不是一个函数,它是一个const数组的字符和2)0x0720a3de不是一个有效的内存地址,闪存地址范围从0x08000000开始

embedded arm gnu cortex-m3 stm32

16
推荐指数
4
解决办法
1万
查看次数

为什么struct assignment与struct中的数组一起使用

我试图向一个同事解释一个概念,然后认识到我的理解是错误的.

如何嵌入数组的结构可分配?

例如:

typedef struct {
    uint8_t data[8];
} Test;
...
Test test1;
Test test2;
... some assignment to test1
test2 = test1;
Run Code Online (Sandbox Code Playgroud)

我知道数据是否是类型指针,我们需要实现深度复制,但我试图完全理解它的工作方式.

我的过程是因为'data'通常是指向第一个元素的指针,而&data将是该指针的地址.在struct的情况下,结构地址是编译器用来访问数组的?

有人可以解释允许这种情况的语言机制.这只是c结构的语法糖吗?如果是这样,为什么不实现这样的直接数组赋值......

uint8_t data[10];
uint8_t data2[10];
...
data2 = data;
Run Code Online (Sandbox Code Playgroud)

为什么经过多年的C编程,我对于我曾经使用但从未理解的机制存在存在的语言危机?

c arrays struct pointers

5
推荐指数
1
解决办法
2168
查看次数

标签 统计

arm ×1

arrays ×1

c ×1

cortex-m3 ×1

embedded ×1

gnu ×1

pointers ×1

stm32 ×1

struct ×1