日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2024/9/27 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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了,真奇怪

我沒發現任務切換和信號量有什么關系啊。

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

我粗略的跟蹤了下程序,發現沒有什么和信號量等變化有關的函數和變量。

請各位兄弟姐妹門忙幫解決一下

總結

以上是生活随笔為你收集整理的linux信号量参数能在线改吧,UCOSII信号量有问题,CNT值会自己变化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。