日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時(shí)間:2024/9/27 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux信号量参数能在线改吧,UCOSII信号量有问题,CNT值会自己变化 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我移植通過了,創(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。