完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在使用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)函数都不会得到执行。 A_entry进程任务执行结果出错,任务没有死掉,但是最终的结果不符合预期。 请教大家,这个问题该怎么解决? |
|
相关推荐
4个回答
|
|
定时器超时函数并不在线程上下文中执行,如果需要在线程上下文中执行,请使用soft timer
|
|
|
|
void Updates_Timerout(void *parameter)函数其实就是soft timer的超时执行函数。不是硬件定时器超时中断服务函数!
问题已经解决, 是因为我在void Updates_Timerout(void *parameter)这个函数定义了一个 static u16 类型变量,将这个变量类型改为 u16 类型之后,问题就消失了。 |
|
|
|
问题只是被隐藏了,softtimer触发函数执行上下文是另一个线程里面rt_thread_timer_entry,你开大A_entry的stack没有意义。你需要把RT_TIMER_THREAD_STACK_SIZE定义的大一些才行。
|
|
|
|
的确如此,谢谢你的提醒!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
583 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
2207 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1227 浏览 0 评论
1776 浏览 0 评论
1462 浏览 0 评论
74794 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 16:31 , Processed in 0.669329 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号