打印

ARM Cortex M3 问题

[复制链接]
2514|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
想实习去|  楼主 | 2010-3-12 13:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好,

我在使用这个OS的时候,发现一个问题,在中断里调用函数会导致系统挂掉:


我的程序大致描述如下:

除了系统systick中断,只开了一个RTC秒中断。
在RTC中断里每隔一秒输出一个flag,是采用了OS里的isr_SetFlag()函数

void RTC_IRQHandler(void)
{
if (RTC_GetITStatus(RTC_IT_SEC) != RESET)
{
/* Clear the RTC Second interrupt */
RTC_ClearITPendingBit(RTC_IT_SEC);
CoEnterISR();
isr_SetFlag(RTC_flag);
CoExitISR();
// display = 1;
}
}

main.c里建立了4个任务优先级分别为1,2,3,4
在LCD显示任务里,查询中断的标志,如果有,则显示LCD。
//建立一个事件
RTC_flag = CoCreateFlag(1,0);
while(1)
{
//等待秒中断标志
err = CoWaitForSingleFlag(RTC_flag, 100);
if(err == E_OK)
// if(display == 1)
{
// display = 0;


//取当前系统的时间
time_now = Time_GetCalendarTime();
//LCD显示
以下函数省略
…………
}
CoTickDelay (100);
}
另外2个任务是分别点亮2个led,非常简单。
void TSK_LED1(void* pdata)
{
while(1)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_4);
CoTickDelay (500);
GPIO_SetBits(GPIOC, GPIO_Pin_4);
CoTickDelay (500);
}

void TSK_LED2(void* pdata)
{
while(1)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_7);
CoTickDelay (100);
GPIO_SetBits(GPIOC, GPIO_Pin_7);
CoTickDelay (100);
}


}
还有一个任务,什么都不做,只是延迟10ms,原来是按键处理,我屏蔽掉了,一样出问题
void TSK_KEY(void* pdata)
{
while(1)
{
// Key_Task_Entry();
CoTickDelay (10);
}
}

结果运行后发现,在系统运行大概200-2000s左右的时间里必然出现问题。出现问题时的现象表现也不同。
大致表现是,有时不知为何增加了一个优先级为0的dlyNext,delay time为0XFFFFFFFF,导致时间计算出现问题。
有时4个系统任务有的会被删除
有时会死在time.c的InsertDelayList()函数里,表现为dlyNext->TCBnext和dlyNext->TCBprev相等,从而跳不出while循环


我的程序应该都没有问题,因为我如果把OS中断标志修改成全局标志,display。显示时查询这个标志,则运行2天2夜也不会死机
只要改成isr_SetFlag,则肯定会在2000s以内出问题。


以上是我在调试时发现的一个问题,比较严重。请验证。
osconfig里只修改了如下:
#define CFG_SYSTICK_FREQ        (1000)
其他未做修改。

相关帖子

沙发
年轻不在| | 2010-3-12 13:06 | 只看该作者
是的,CoOSV1.03存在延时时间有可能从0减到0xffffffff的bug,你尝试一下新版本的OS(V1.1),是否还会出现该问题?

如还存在,请及时联系我们。如果可以,请将测试例程打包发给我们,谢谢!

使用特权

评论回复
板凳
米其林r| | 2010-3-12 13:09 | 只看该作者
在1.03版本下有该问题,后来升级到了1.1版本,同样会有该问题出现!



我看了中断函数里的程序变化,感觉应该不是这个地方出的问题。

像是在 InsertDelayList() 里出的问题。

出现问题是随机的。但是运行一段时间后肯定会出现!

使用特权

评论回复
地板
北京户口| | 2010-3-12 13:10 | 只看该作者
非常抱歉,这一个问题确实是由于CoOS内核源码有未被锁的代码片段,从而导致在此代码片段运行期间触发中断,并在中断服务程序中调用系统API,从而导致系统调用错误。

我们将新版本CoOS在您的测试例程上运行了较长一段时间,该问题没有再次重现。

感谢您的反馈和意见,Coocox团队祝您新春愉快,合家欢乐!

使用特权

评论回复
5
yoyowodeai| | 2010-3-12 13:12 | 只看该作者
您好,程序升级到了1.11版本后,运行原来的程序没有发现问题。
可是当我在主程序里增加了2个邮箱后,又出现了任务死掉的现象。

Osconfig.h里               
CFG_SYSTICK_FREQ  1000
CFG_MAX_USER_TASKS 10


表现为运行一段时间后会死机,所有的任务都不能进去。
请测试!

使用特权

评论回复
6
nckdone| | 2010-3-12 14:53 | 只看该作者
mark,留观

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

111

主题

500

帖子

1

粉丝