嵌入式技术论坛
直播中

贾永世

7年用户 1812经验值
私信 关注
[问答]

小白求助定时器栈大小超过2080字节后程序无法运行咋办?

RTT定时器的栈设置为静态分配,在ZI段创建了一个数组
static rt_uint8_t timer_thread_stack[RT_TIMER_THREAD_STACK_SIZE];
当我设置超过2082字节后,单片机会卡死且无法运行


// The stack size of timer thread <0-8192>
//  Default: 512
#define RT_TIMER_THREAD_STACK_SIZE  2082
我的单片机ram有64KB,目前使用地址0x20002AF8开始,共0x3D508字节
2.jpg
map文件,并没有到达RAM的最大结束内存:
2.jpg
所以,为什么会死机啊,救救

回帖(4)

杨帆

2023-4-17 18:17:44
ALIGN(RT_ALIGN_SIZE)
static rt_uint8_t timer_thread_stack[RT_TIMER_THREAD_STACK_SIZE];
...
/* start software timer thread */
    rt_thread_init(&timer_thread,
                   "timer",
                   rt_thread_timer_entry,
                   RT_NULL,
                   &timer_thread_stack[0],
                   sizeof(timer_thread_stack),
                   RT_TIMER_THREAD_PRIO,
                   10);
定时器也是调的rt_thread_init接口,所以我觉得软件bug的可能性很低。
应该是你配置RAM的地址及大小有问题,看一下你用的芯片的内存映射说明。
举报

贾永世

2023-4-17 18:18:14
我算了一下,我刚好再增大一些,就超过了RAM的最大内存64K了,所以才会不行。
举报

李玉兰

2023-4-17 18:18:22
再数组前面加一个4字节对齐?
static rt_uint8_t timer_thread_stack[RT_TIMER_THREAD_STACK_SIZE];
举报

贾永世

2023-4-17 18:18:37
前面有对齐,我刚好再增大一些,就超过了RAM的最大内存64K了,所以才会不行。
举报

更多回帖

×
20
完善资料,
赚取积分