搜索
bottom↓
回复: 3

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

[复制链接]

出0入0汤圆

发表于 2010-4-7 09:26:12 | 显示全部楼层 |阅读模式
在使用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[512];只要执行这个函数的时候,系统就会打印如下信息:
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进程任务执行结果出错,任务没有死掉,但是最终的结果不符合预期。

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-4-7 09:33:38 | 显示全部楼层
关于定时器部分,请参见《编程指南》

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

出0入0汤圆

 楼主| 发表于 2010-4-7 10:15:11 | 显示全部楼层
void Updates_Timerout(void *parameter)函数其实就是soft timer的超时执行函数。不是硬件定时器超时中断服务函数!

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

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

出0入0汤圆

发表于 2010-4-7 10:17:44 | 显示全部楼层
A[512]; 这个是局部变量吗?可能你的局部变量太大导致堆栈溢出。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 10:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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