UC OS2同步的问题,很让小弟郁闷,望各位大侠帮助!

emzcemzc 2009-12-10 03:21:58
小弟遇到一个棘手的问题,希望各位大侠给点意见。谢谢。

使用LPC2478芯片,UC/OS 2系统。目前有两个task不能同步。暂时名为TASK1和TASK2吧。简要代码及功能描述如下:


ucos() /*主函数,开task1和task2,其中task1的优先级比task2要高,两者的堆栈都是512*/
{
check_process_semp = OSMutexCreate(6,&err); /*互斥锁优先级比task1和task2都高*/
OSTaskCreateExt(TASK1,
(void *)0,
&TASK1_STACK[TASK1_STACK_SIZE-1],
TASK1_PRIO,
TASK1_ID,
&TASK1_STACK[0],
TASK1_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

OSTaskCreateExt(TASK2,
(void *)0,
&TASK2_STACK[TASKG_STACK_SIZE-1],
TASK2_PRIO,
TASK2_ID,
&TASK2_STACK[0],
TASK2_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
}

task1
{
while(1)
{
OSMutexPend(check_process_semp,0,&c_p_err); /*请求互斥锁*/
check_process(); /*共享资源*/
OSMutexPost(check_process_semp); /*释放互斥锁*/
OSTimeDly(2000); /*10秒*/
}
}

task2
{
while(1)
{
OSMutexPend(check_process_semp,0,&c_p_err); /*请求互斥锁*/
other_process(); /*另一个函数*/
check_process(); /*共享资源*/
OSMutexPost(check_process_semp); /*释放互斥锁*/
OSTimeDly(2000);
}
}

TASK1的作用是每个一段时间检查一次共享资源的状态,task2的作用是更新共享资源,在更改完成后,检查一次共享资源的状态。
other_process为更新共享资源函数,check_process()程序为检查共享资源状态的。两个函数都存在从串口中读数据,从rtc(中断方式)取当前时间的过程。

目前
1. 单个task运行时(堆栈为512),可以连续运行数个小时(>=5)不出任何问题。
2. 当两个task同时运行时(堆栈为512),先task1运行一次,然后task2运行一次,接着axd在 “PrefetchAbort B”死掉。
3. 如果将两个task的堆栈改为5120(扩大十倍),两个task可以运行1-2个小时(task1-task2-task1交替运行),然后在“PrefetchAbort B”死掉。

请各位大侠出出主意,应该从哪个方面入手调试呢?是检查task1 task2内的指针是不是越界了,还是检查什么别的?


这是小弟发的第一个贴,打包票给分,请大家别被结贴率0%吓到。
...全文
110 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
emzcemzc 2009-12-10
  • 打赏
  • 举报
回复
经过对代码的注释,定位到了错误的子程序。这个程序是IAP操作,将值写入flash。周立功的程序还是不可相信。啊啊啊!
emzcemzc 2009-12-10
  • 打赏
  • 举报
回复
现在把程序一行行注释掉,然后一行行解除注释。用最笨的方法来搞吧。实在是身心疲惫了。
分给你了,谢谢咯~
Arnold9009 2009-12-10
  • 打赏
  • 举报
回复
跟踪一下堆栈的变化

检查一下相关函数的变量和函数调用的处理

动态内存分配能不用就不用

指针的处理
emzcemzc 2009-12-10
  • 打赏
  • 举报
回复
那请问Arnold9009大侠一下,内存没有释放这个问题,应该怎么去检查呢?我把单个TASK的数组全部看了一次,感觉数组应该没有越界。
Arnold9009 2009-12-10
  • 打赏
  • 举报
回复
应该是资源释放的问题

在程序运行过程中,有些内存获取之后没有释放,导致运行时间长了之后,堆栈溢出,从而产生取指异常

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧