色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TThread完整版學(xué)習(xí)(RCEA考試練習(xí))之信號(hào)量使用

冬至配餃子 ? 來源:笨狗學(xué)電子 ? 作者:一只技術(shù)狗 ? 2023-07-26 16:43 ? 次閱讀

信號(hào)量是線程間同步的一種方式。在rtthread中用于線程間同步的還有互斥量和事件集。

什么是進(jìn)程間同步,簡單點(diǎn)的類比就是工廠中的生產(chǎn)線,如果想要執(zhí)行B工序就必須等待A工序的完成,那么工序A和工序B就是同步的關(guān)系,在程序中也是一樣。只不過是工序變成了線程。在RTThread的文檔里有這樣的描述:同步是指按預(yù)定的先后次序進(jìn)行運(yùn)行,線程同步是指多個(gè)線程通過特定的機(jī)制(如互斥量,事件對(duì)象,臨界區(qū))來控制線程之間的執(zhí)行順序,也可以說是在線程之間通過同步建立起執(zhí)行順序的關(guān)系,如果沒有同步,那線程之間將是無序的。

然后就是解釋一下信號(hào)量,一個(gè)經(jīng)典的解釋

以生活中的停車場(chǎng)為例來理解信號(hào)量的概念:

①當(dāng)停車場(chǎng)空的時(shí)候,停車場(chǎng)的管理員發(fā)現(xiàn)有很多空車位,此時(shí)會(huì)讓外面的車陸續(xù)進(jìn)入停車場(chǎng)獲得停車位;

②當(dāng)停車場(chǎng)的車位滿的時(shí)候,管理員發(fā)現(xiàn)已經(jīng)沒有空車位,將禁止外面的車進(jìn)入停車場(chǎng),車輛在外排隊(duì)等候;

③當(dāng)停車場(chǎng)內(nèi)有車離開時(shí),管理員發(fā)現(xiàn)有空的車位讓出,允許外面的車進(jìn)入停車場(chǎng);待空車位填滿后,又禁止外部車輛進(jìn)入。

在此例子中,管理員就相當(dāng)于信號(hào)量,管理員手中空車位的個(gè)數(shù)就是信號(hào)量的值(非負(fù)數(shù),動(dòng)態(tài)變化);停車位相當(dāng)于公共資源(臨界區(qū)),車輛相當(dāng)于線程。車輛通過獲得管理員的允許取得停車位,就類似于線程通過獲得信號(hào)量訪問公共資源。

最后信號(hào)量的使用。其實(shí)如果不追究內(nèi)核的話,操作系統(tǒng)只需要調(diào)用api就可以了。具體就是創(chuàng)建信號(hào)量(rt_sem_create)、刪除信號(hào)量(rt_sem_delete)獲取信號(hào)量( rt_sem_take)、釋放信號(hào)量( rt_sem_release)詳細(xì)使用手冊(cè)可以參考這里

接下來就是一個(gè)實(shí)驗(yàn),使用信號(hào)量控制LED以500ms的間隔閃爍。

思路:使用一個(gè)定時(shí)器:每500毫秒釋放一次信號(hào)量,在創(chuàng)建一個(gè)線程用來反轉(zhuǎn)LED燈,當(dāng)有信號(hào)量的時(shí)候就執(zhí)行反轉(zhuǎn)LED燈。

程序部分

/* defined the LED0 pin: PB1 */
#define LED0_PIN    GET_PIN(H, 11)


//定義信號(hào)量
static rt_sem_t led_sem = RT_NULL; 
//定義線程
static char led_stack[512];
static struct rt_thread led_thread;
//定時(shí)器定義
static rt_timer_t timer_res;

void task_init(void); //線程初始化函數(shù)
static void led_entry(void *parameter);//LED反轉(zhuǎn)線程
static void timer(void *parameter);//定時(shí)器任務(wù)


int main(void)
{
    /* set LED0 pin mode to output */
    rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
  task_init();
    while (1)
    {
        rt_thread_mdelay(1000);
    }


}


void task_init(void)
{


  /* 創(chuàng)建一個(gè)動(dòng)態(tài)信號(hào)量,初始值是 0,先進(jìn)先出*/
    led_sem = rt_sem_create("led on sem", 0, RT_IPC_FLAG_FIFO);
    if (led_sem == RT_NULL)
    {
        rt_kprintf("create led on semaphore failed.n");
        return ;
    }
  //靜態(tài)創(chuàng)建任務(wù)
  rt_thread_init(&led_thread, //線程句柄 
                   "led on", //線程的描述
                   led_entry, //線程入口函數(shù)
                   RT_NULL, //線程入口參數(shù)
                   &led_stack[0],//線程的棧的起始地址
                   sizeof(led_stack),//線程的棧大小
                   3, 10);//線程的優(yōu)先級(jí)和時(shí)間片大小
    rt_thread_startup(&led_thread);//啟動(dòng)線程

  timer_res = rt_timer_create("led sem",//定時(shí)器描述
                     timer,//定時(shí)器入口函數(shù)
                     RT_NULL,//定時(shí)器入口參數(shù)
                     500,//定時(shí)時(shí)間
                     RT_TIMER_FLAG_PERIODIC);//循環(huán)  
  if(timer_res != RT_NULL)
  {
    rt_timer_start(timer_res);//定時(shí)器開始
    rt_kprintf("timer start. n");
  }
}


static void timer(void *parameter)
{
  rt_sem_release(led_sem);//釋放信號(hào)量
}




static void led_entry(void *parameter)
{
  while(1)
  {
    /*以永遠(yuǎn)阻塞的形式等待信號(hào)量*/
    if(rt_sem_take (led_sem, RT_WAITING_FOREVER) == RT_EOK)
    {
      HAL_GPIO_TogglePin(GPIOH, GPIO_PIN_11);//反轉(zhuǎn)LED
      rt_kprintf("led toggle.tick:%d n",rt_tick_get());
    }
  }
}

下面就是運(yùn)行結(jié)果

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • led燈
    +關(guān)注

    關(guān)注

    22

    文章

    1592

    瀏覽量

    108231
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3255

    瀏覽量

    115158
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1216

    瀏覽量

    52267
  • 信號(hào)量
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    8367
  • RTThread
    +關(guān)注

    關(guān)注

    8

    文章

    132

    瀏覽量

    40957
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    SD卡協(xié)議學(xué)習(xí)點(diǎn)滴(完整版本)

    SD卡協(xié)議學(xué)習(xí)點(diǎn)滴(完整版本)
    發(fā)表于 08-20 14:01

    SD卡協(xié)議學(xué)習(xí)點(diǎn)滴(完整版本)

    SD卡協(xié)議學(xué)習(xí)點(diǎn)滴(完整版本)
    發(fā)表于 05-04 08:13

    RTThread操作系統(tǒng)移植

    RTThread完整版學(xué)習(xí)(RCEA考試練習(xí))操作系統(tǒng)移植(照貓畫虎版)RTThread的一大特色就是有豐富免費(fèi)的組件可以用,但是對(duì)于我這
    發(fā)表于 08-03 06:42

    《VHDL實(shí)用教程》完整版

    電子發(fā)燒友網(wǎng)站提供《《VHDL實(shí)用教程》完整版.txt》資料免費(fèi)下載
    發(fā)表于 09-21 14:30 ?0次下載

    《VHDL實(shí)用教程》完整版

    電子發(fā)燒友網(wǎng)站提供《《VHDL實(shí)用教程》完整版.txt》資料免費(fèi)下載
    發(fā)表于 08-28 16:30 ?0次下載

    AltiumDesignerSummer9完整版安裝

    AltiumDesignerSummer9完整版安裝
    發(fā)表于 12-08 21:37 ?0次下載

    ASCLL碼表(完整版)

    ASCLL碼表(完整版)ASCLL碼表(完整版)ASCLL碼表(完整版)ASCLL碼表(完整版)
    發(fā)表于 11-20 11:26 ?0次下載

    ASCII碼表完整版

    ASCII碼表完整版,方便學(xué)習(xí)C語言或者做LCD顯示器時(shí)用到。
    發(fā)表于 12-22 10:44 ?0次下載

    STM32固件庫_中文版_最完整版

    STM32固件庫_中文版_最完整版,看好了是最完整版
    發(fā)表于 05-16 11:05 ?0次下載

    ASCII碼表(完整版)

    ASCII碼表(完整版),感興趣的小伙伴可以看看。
    發(fā)表于 07-29 14:15 ?0次下載

    Linux命令大全完整版

    Linux命令大全完整版
    發(fā)表于 12-16 22:33 ?0次下載

    C51學(xué)習(xí)的教程完整版

    C51學(xué)習(xí)的教程完整版
    發(fā)表于 10-16 10:52 ?0次下載
    C51<b class='flag-5'>學(xué)習(xí)</b>的教程<b class='flag-5'>完整版</b>

    C語言程序設(shè)計(jì)上機(jī)考試練習(xí)題和答案免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是C語言程序設(shè)計(jì)上機(jī)考試練習(xí)題和答案免費(fèi)下載
    發(fā)表于 10-28 08:00 ?15次下載

    常見電子元器件完整版

    電子元器件完整版
    發(fā)表于 06-21 14:54 ?0次下載

    SD卡協(xié)議學(xué)習(xí)點(diǎn)滴(完整版本)

    電子發(fā)燒友網(wǎng)站提供《SD卡協(xié)議學(xué)習(xí)點(diǎn)滴(完整版本).pdf》資料免費(fèi)下載
    發(fā)表于 10-13 09:31 ?1次下載
    SD卡協(xié)議<b class='flag-5'>學(xué)習(xí)</b>點(diǎn)滴(<b class='flag-5'>完整版</b>本)
    主站蜘蛛池模板: 一个人HD在线观看免费高清视频| 永久免费精品影视网站| 免费看的一级毛片| 国内极度色诱视频网站| 高肉黄暴NP文公交车| YELLOW在线观看高清视频免费| 7777色鬼xxxx欧美色夫| 在野外被男人躁了一夜动图| 野花韩国免费高清电影 | 主播蜜汁丝袜精品自拍| 一扒二脱三插片在线观看| 亚洲欧美日本国产在线观18| 国产精品www视频免费看| 成人欧美尽粗二区三区AV| 99热国产这里只有精品6| 99在线这精品视频| GOGOGO高清免费播放| 不卡的在线AV网站| 成人国产一区| 公和我做好爽添厨房中文字幕 | 91精品免费久久久久久久久| 748亚洲大胆国模人体| 992交通广播| tube69hdxxxx日本| 电影日本妻子| 国产午夜精品久久久久婷婷 | 失禁h啪肉尿出来高h| 午夜射精日本三级| 亚洲精品一线二线三线无人区| 亚洲性夜夜夜色综合网| 在线黑人抽搐潮喷| 99欧美精品| 国产白丝JK被疯狂输出视频| 国产亚洲精品成人a在线| 久久久久综合网| 女教师の诱惑| 九色PORNY真实丨国产免费| 久久久影院亚洲精品| 年轻的搜子8中字在线观看| 日韩人妻无码精品久久中文字幕| 乌克兰少妇大胆大BBW|