硬汉嵌入式论坛

 找回密码
 立即注册
查看: 608|回复: 9
收起左侧

[μCOS-III] 定义了一个全局数组,程序死机

[复制链接]

12

主题

26

回帖

62

积分

初级会员

积分
62
发表于 2024-12-12 10:39:10 | 显示全部楼层 |阅读模式
本帖最后由 yx0124 于 2024-12-12 10:44 编辑

请教大佬们一个问题。

现象:程序之前有一个全局数组A[1024],现在重新定义了一个全局数组B[150];用数组B替换了部分使用数组A的地方。然后程序运行10几秒后就会被看门狗重启。

排查过程:
1、去掉看门狗,keil仿真程序发现所有任务都不运行(最高优先级的任务并不涉及数组A和数组B的使用);中断时正常运行的。
2、把其中使用了数组B的函数C再改回使用数组A,程序运行正常。但是函数C是特定情况才会被调用,仿真程序也没发现调用了函数C。(观察了其他使用数组B的函数,包括和数组B相邻地址的变量,没发现数组越界)
3、定义了一个全局静态数组D,只在函数C中memset数组D;函数C中使用的依旧是数组B,程序运行正常。
4、去掉看门狗,keil再次仿真程序。在程序卡死后,随机的点STOP,观察Call Stack Window 窗口,发现会显示最高优先级任务中的一个函数E,而且函数E中一个局部变量数组F在窗口中显示的数组只有一半。(数组大小20,定义数组的时候赋了初值,窗口显示的只有0-16有值 18-19是为0)。于是把局部变量数组F改为静态的,程序运行正常。

以上4个过程是独立的。

大佬们知道这是什么原因吗?



回复

使用道具 举报

21

主题

481

回帖

544

积分

金牌会员

积分
544
发表于 2024-12-12 12:29:14 | 显示全部楼层
栈溢出?内存设大一点看看
回复

使用道具 举报

12

主题

26

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2024-12-12 13:28:22 | 显示全部楼层
h_007 发表于 2024-12-12 12:29
栈溢出?内存设大一点看看

试过了,没有用
回复

使用道具 举报

21

主题

481

回帖

544

积分

金牌会员

积分
544
发表于 2024-12-12 13:47:49 | 显示全部楼层
keil是什么版本?MCU具体是什么型号?
回复

使用道具 举报

12

主题

26

回帖

62

积分

初级会员

积分
62
 楼主| 发表于 2024-12-12 14:43:38 | 显示全部楼层
h_007 发表于 2024-12-12 13:47
keil是什么版本?MCU具体是什么型号?

MCU是GD32F103ZKT6  keil是V5.36.0.0  
回复

使用道具 举报

7

主题

35

回帖

56

积分

初级会员

积分
56
发表于 2024-12-12 17:00:16 | 显示全部楼层
你可以直接试试情况1下,定义全局数组B[150],采用__align(1) uint8_t value[150] __attribute__((at(0x20000100))); 将他放入固定的RAM中,看看是不是数据B导致的。。
回复

使用道具 举报

21

主题

481

回帖

544

积分

金牌会员

积分
544
发表于 2024-12-12 19:45:18 | 显示全部楼层
yx0124 发表于 2024-12-12 14:43
MCU是GD32F103ZKT6  keil是V5.36.0.0

不开优化看看
回复

使用道具 举报

21

主题

481

回帖

544

积分

金牌会员

积分
544
发表于 2024-12-12 19:48:51 | 显示全部楼层
变量声明/定义,函数调用等,方便的话,发上来看看。
需要看具体的代码才好判断
回复

使用道具 举报

4

主题

119

回帖

131

积分

初级会员

积分
131
发表于 2024-12-12 19:49:04 | 显示全部楼层
数组B替换了部分使用数组A的地方,看看数组下标是不是越界了
回复

使用道具 举报

4

主题

58

回帖

70

积分

初级会员

积分
70
发表于 2024-12-14 13:53:07 | 显示全部楼层
估计数组没有4字节对齐,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-4-25 21:56 , Processed in 0.495107 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表