swordlife 发表于 2010-4-7 09:26:12

RT-Thread 任务堆栈大小更改而引发的现象,请教!

在使用RT-thread中,定义了一个任务进程。这个任务进程被如下定义的:

rt_thread_create("Flash",A_entry, RT_NULL,2048, 3, 10);

在这个任务进程中,启动了一个软件定时器。rt_timer_start(&Updata_Timer);        //启动更新超时的定时器

这个定时器超时了就会执行 void Updates_Timerout(void *parameter)这个函数。

问题:
我在 void Updates_Timerout(void *parameter)这个函数里面定义了一个比较大的缓冲数组 A;只要执行这个函数的时候,系统就会打印如下信息:
psr: 0x61000000
pc: 0x08007df2
lr: 0x08007d8d
r12: 0x00000000
r03: 0x00000000
r02: 0x00000000
r01: 0x00000000
r00: 0x00000000
hard fault on thread: tidle

我尝试将 rt_thread_create("Flash",A_entry, RT_NULL,2048, 3, 10);中的2048Byte 改为 6KByte,但是改为6K之后,出现如下现象:

1.void Updates_Timerout(void *parameter)函数都不会得到执行。
2. A_entry进程任务执行结果出错,任务没有死掉,但是最终的结果不符合预期。

请教大家,这个问题该怎么解决?

ffxz 发表于 2010-4-7 09:33:38

关于定时器部分,请参见《编程指南》

(定时器超时函数并不在线程上下文中执行,如果需要在线程上下文中执行,请使用soft timer)

swordlife 发表于 2010-4-7 10:15:11

void Updates_Timerout(void *parameter)函数其实就是soft timer的超时执行函数。不是硬件定时器超时中断服务函数!

问题已经解决, 是因为我在void Updates_Timerout(void *parameter)这个函数定义了一个 static u16 类型变量,将这个变量类型改为 u16 类型之后,问题就消失了。

依我对static 关键词的了解,目前还无法完全理解产生这个现象的原因。哪位高手能够说说!

oldtom 发表于 2010-4-7 10:17:44

A; 这个是局部变量吗?可能你的局部变量太大导致堆栈溢出。
页: [1]
查看完整版本: RT-Thread 任务堆栈大小更改而引发的现象,请教!