linux信号量参数能在线改吧,UCOSII信号量有问题,CNT值会自己变化

我移植通过了,创建任务、删除任务这些实验也做过,没问题,然后我就准备来学习信号量,就发现问题了。

//这个是起始任务

void TaskStart(void * pdata)

{

pdata = pdata;

Sem_Event = OSSemCreate(1);   //创建信号量

OSTaskCreate(MY_STK, (void * )0,(OS_STK *)&TaskMy_STK[LED_STK_SIZE], LED_TASK_Prio);

OSTaskCreate(YOU_STK, (void * )0,(OS_STK *)&TaskYou_STK[LED_STK_SIZE], LED1_TASK_Prio);

err=OSTaskDel(OS_PRIO_SELF);//删除自己 OSTaskSuspend(START_TASK_Prio);

}

我在开始任务中创建了一个信号量  Sem_Event = OSSemCreate(1);

在运行完 TaskStart任务之后,就进入MY_STK任务。    MY_STK  优先级比   YOU_STK  高

如果这个创建信号量放在 MY_STK,YOU_STK前面创建的话, 信号量的(tpye)类型也会发生变化(即不是Sem信号类型了)。

这结果是我跟踪程序的时候发现的:

在MY_STK任务的信号量请求和释放的函数中,程序运行了下列     return (OS_ERR_EVENT_TYPE);  这行语句,说明了信号量的类型发生改变了     如果我删除了  err=OSTaskDel(OS_PRIO_SELF);//删除自己 OSTaskSuspend(START_TASK_Prio);   这条语句的话,信号量类型又不会发生变化

这到底是怎么回事的呢?

if (pevent->OSEventType != OS_EVENT_TYPE_SEM) {   /* Validate event block type                     */

return (OS_ERR_EVENT_TYPE);

}

void MY_STK(void * pdata)

{

while(1)

{

OSSemPend(Sem_Event,0,&err);   //请求信号量

GPIO_ResetBits(GPIOA,GPIO_Pin_8);

OSSemPost(Sem_Event);          //发送(释放)信号量

OSTimeDlyHMSM(0,0,0,250);

}

}

这个任务的    OSSemPend(Sem_Event,0,&err);   //请求信号量    前面 加上一个测量信号量Sem_Event->OSEventCnt的值发现,我都还没请求信号量的呢,OSEventCnt的值就变成0了。

下面这个是YOU_STK任务

void YOU_STK(void * pdata)

{

while(1)

{

OSSemPend(Sem_Event,0,&err);       //请求信号量

GPIO_ResetBits(GPIOD,GPIO_Pin_2);

OSSemPost(Sem_Event);          //发送(释放)信号量

OSTimeDlyHMSM(0,0,0,250);

}

}

经过我初步验证后  貌似是   每次切换任务的时候   信号量的CNT值就会发生变化。

还有,我在MY_STK 任务的  OSSemPost(Sem_Event);          //发送(释放)信号量  后检测到了CNT的值会变为1,但是经过

OSTimeDlyHMSM(0,0,0,250);  之后跳入YOU_STK任务的时候,在  OSSemPend(Sem_Event,0,&err);       //请求信号量

之前来检测CNT的值,发现又变为0了,真奇怪

我没发现任务切换和信号量有什么关系啊。

我百思不得其解,这是什么原因呢?

我粗略的跟踪了下程序,发现没有什么和信号量等变化有关的函数和变量。

请各位兄弟姐妹门忙帮解决一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值