linux信号量参数能在线改吧,UCOSII信号量有问题,CNT值会自己变化
我移植通過了,創(chuàng)建任務(wù)、刪除任務(wù)這些實(shí)驗(yàn)也做過,沒問題,然后我就準(zhǔn)備來學(xué)習(xí)信號(hào)量,就發(fā)現(xiàn)問題了。
//這個(gè)是起始任務(wù)
void TaskStart(void * pdata)
{
pdata = pdata;
Sem_Event = OSSemCreate(1);?? //創(chuàng)建信號(hào)量
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);
}
我在開始任務(wù)中創(chuàng)建了一個(gè)信號(hào)量? Sem_Event = OSSemCreate(1);
在運(yùn)行完 TaskStart任務(wù)之后,就進(jìn)入MY_STK任務(wù)。??? MY_STK? 優(yōu)先級(jí)比?? YOU_STK? 高
如果這個(gè)創(chuàng)建信號(hào)量放在 MY_STK,YOU_STK前面創(chuàng)建的話, 信號(hào)量的(tpye)類型也會(huì)發(fā)生變化(即不是Sem信號(hào)類型了)。
這結(jié)果是我跟蹤程序的時(shí)候發(fā)現(xiàn)的:
在MY_STK任務(wù)的信號(hào)量請(qǐng)求和釋放的函數(shù)中,程序運(yùn)行了下列???? return (OS_ERR_EVENT_TYPE);? 這行語句,說明了信號(hào)量的類型發(fā)生改變了???? 如果我刪除了? err=OSTaskDel(OS_PRIO_SELF);//刪除自己?OSTaskSuspend(START_TASK_Prio);?? 這條語句的話,信號(hào)量類型又不會(huì)發(fā)生變化
這到底是怎么回事的呢?
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);?? //請(qǐng)求信號(hào)量
GPIO_ResetBits(GPIOA,GPIO_Pin_8);
OSSemPost(Sem_Event);????????? //發(fā)送(釋放)信號(hào)量
OSTimeDlyHMSM(0,0,0,250);
}
}
這個(gè)任務(wù)的??? OSSemPend(Sem_Event,0,&err);?? //請(qǐng)求信號(hào)量??? 前面 加上一個(gè)測(cè)量信號(hào)量Sem_Event->OSEventCnt的值發(fā)現(xiàn),我都還沒請(qǐng)求信號(hào)量的呢,OSEventCnt的值就變成0了。
下面這個(gè)是YOU_STK任務(wù)
void YOU_STK(void * pdata)
{
while(1)
{
OSSemPend(Sem_Event,0,&err);?????? //請(qǐng)求信號(hào)量
GPIO_ResetBits(GPIOD,GPIO_Pin_2);
OSSemPost(Sem_Event);????????? //發(fā)送(釋放)信號(hào)量
OSTimeDlyHMSM(0,0,0,250);
}
}
經(jīng)過我初步驗(yàn)證后? 貌似是?? 每次切換任務(wù)的時(shí)候?? 信號(hào)量的CNT值就會(huì)發(fā)生變化。
還有,我在MY_STK 任務(wù)的? OSSemPost(Sem_Event);????????? //發(fā)送(釋放)信號(hào)量? 后檢測(cè)到了CNT的值會(huì)變?yōu)?,但是經(jīng)過
OSTimeDlyHMSM(0,0,0,250);? 之后跳入YOU_STK任務(wù)的時(shí)候,在? OSSemPend(Sem_Event,0,&err);?????? //請(qǐng)求信號(hào)量
之前來檢測(cè)CNT的值,發(fā)現(xiàn)又變?yōu)?了,真奇怪
我沒發(fā)現(xiàn)任務(wù)切換和信號(hào)量有什么關(guān)系啊。
我百思不得其解,這是什么原因呢?
我粗略的跟蹤了下程序,發(fā)現(xiàn)沒有什么和信號(hào)量等變化有關(guān)的函數(shù)和變量。
請(qǐng)各位兄弟姐妹門忙幫解決一下
總結(jié)
以上是生活随笔為你收集整理的linux信号量参数能在线改吧,UCOSII信号量有问题,CNT值会自己变化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 00后明星帅哥排行榜(00后明星)
- 下一篇: linux的vim显示E172,Linu