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

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RT—thread線程調度詳解

嵌入式應用開發 ? 來源:嵌入式應用開發 ? 作者:嵌入式應用開發 ? 2022-05-19 17:07 ? 次閱讀

系統調度就是在就緒列表中尋找優先級最高的就緒線程,然后去執行該線程。但是目前我們還不支持優先級, 僅實現兩個線程輪流切換,系統調度函數rt_schedule

/* 系統調度 */
void rt_schedule(void)
{
    struct rt_thread *to_thread;
    struct rt_thread *from_thread;

    /* 兩個線程輪流切換 *///                                    (1)
    if( rt_current_thread ======== rt_list_entry( rt_thread_priority_table[0].next,
                                                        struct rt_thread,
                                                        tlist) )
    {
        from_thread ==== rt_current_thread;
        to_thread ==== rt_list_entry( rt_thread_priority_table[1].next,
                                                        struct rt_thread,
                                                        tlist);
    rt_current_thread ==== to_thread;
    }
    else//                                                    (2)
    {
        from_thread ==== rt_current_thread;
        to_thread ==== rt_list_entry( rt_thread_priority_table[0].next,
                                                        struct rt_thread,
                                                        tlist);
    rt_current_thread ==== to_thread;
    }//                                                       (3)
    /* 產生上下文切換 */
    rt_hw_context_switch((rt_uint32_t)&from_thread->sp,(rt_uint32_t)&to_thread->sp);
}

主函數

/**
************************************************************************
* @file    main.c
* @author  fire
* @version V1.0
* @date    2018-xx-xx
* @brief   《RT-Thread內核實現與應用開發實戰指南》書籍例程
*
************************************************************************
* @attention
*
* 實驗平臺:野火 STM32  M4系列開發板
*
* 官網    :www.embedfire.com
* 論壇    :http://www.firebbs.cn
* 淘寶    :https://fire-stm32.taobao.com
*
************************************************************************
*/

/*
*************************************************************************
*                             包含的頭文件
*************************************************************************
*/

#include 
#include "ARMCM4.h"


/*
*************************************************************************
*                              全局變量
*************************************************************************
*/
rt_uint8_t flag1;
rt_uint8_t flag2;

extern rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX];

/*
*************************************************************************
*                      線程控制塊 & STACK & 線程聲明
*************************************************************************
*/


/* 定義線程控制塊 */
struct rt_thread rt_flag1_thread;
struct rt_thread rt_flag2_thread;

ALIGN(RT_ALIGN_SIZE)
/* 定義線程棧 */
rt_uint8_t rt_flag1_thread_stack[512];
rt_uint8_t rt_flag2_thread_stack[512];

/* 線程聲明 */
void flag1_thread_entry(void *p_arg);
void flag2_thread_entry(void *p_arg);

/*
*************************************************************************
*                               函數聲明
*************************************************************************
*/
void delay(uint32_t count);

/************************************************************************
* @brief  main函數
* @param  無
* @retval 無
*
* @attention
***********************************************************************
*/
int main(void)
{
    /* 硬件初始化 */
    /* 將硬件相關的初始化放在這里,如果是軟件仿真則沒有相關初始化代碼 */

    /* 調度器初始化 */
    rt_system_scheduler_init();


    /* 初始化線程 */
    rt_thread_init( &rt_flag1_thread,                 /* 線程控制塊 */
                    flag1_thread_entry,               /* 線程入口地址 */
                    RT_NULL,                          /* 線程形參 */
                    &rt_flag1_thread_stack[0],        /* 線程棧起始地址 */
                    sizeof(rt_flag1_thread_stack) );  /* 線程棧大小,單位為字節 */
    /* 將線程插入到就緒列表 */
    rt_list_insert_before( &(rt_thread_priority_table[0]),&(rt_flag1_thread.tlist) );

    /* 初始化線程 */
    rt_thread_init( &rt_flag2_thread,                 /* 線程控制塊 */
                    flag2_thread_entry,               /* 線程入口地址 */
                    RT_NULL,                          /* 線程形參 */
                    &rt_flag2_thread_stack[0],        /* 線程棧起始地址 */
                    sizeof(rt_flag2_thread_stack) );  /* 線程棧大小,單位為字節 */
    /* 將線程插入到就緒列表 */
    rt_list_insert_before( &(rt_thread_priority_table[1]),&(rt_flag2_thread.tlist) );

    /* 啟動系統調度器 */
    rt_system_scheduler_start();
}

/*
*************************************************************************
*                               函數實現
*************************************************************************
*/
/* 軟件延時 */
void delay (uint32_t count)
{
    for(; count!====0; count--);
}

/* 線程1 */
void flag1_thread_entry( void *p_arg )
{
    for( ;; )
    {
        flag1 ==== 1;
        delay( 100 );
        flag1 ==== 0;
        delay( 100 );

        /* 線程切換,這里是手動切換 */
        rt_schedule();//                                (注意)
    }
}

/* 線程2 */
void flag2_thread_entry( void *p_arg )
{
    for( ;; )
    {
        flag2 ==== 1;
        delay( 100 );
        flag2 ==== 0;
        delay( 100 );

        /* 線程切換,這里是手動切換 */
        rt_schedule();//                                (注意)
    }
}

審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • RT
    RT
    +關注

    關注

    0

    文章

    73

    瀏覽量

    40090
  • 系統調用
    +關注

    關注

    0

    文章

    28

    瀏覽量

    8351
收藏 人收藏

    評論

    相關推薦

    RT-Thread上CAN實踐

    開箱測試RT-Thread官方已完成了對英飛凌XMC7200EVK的移植,通過shell可以看到做好了uart3的console。本文將介紹如何進行RT-ThreadCan移植。接下來我們要完成CAN_FD的驅動移植,并正常啟動RT-T
    的頭像 發表于 11-13 01:03 ?1363次閱讀
    <b class='flag-5'>RT-Thread</b>上CAN實踐

    Nordic-RT-Thread5.1.0移植筆記

    Nordic-RT-Thread5.1.0移植筆記
    的頭像 發表于 10-16 08:09 ?573次閱讀
    Nordic-<b class='flag-5'>RT-Thread</b>5.1.0移植筆記

    2024 RT-Thread全球巡回 線下培訓火熱來襲!

    親愛的RT-Thread社區成員們:我們非常高興地宣布,2024年RT-Thread全球開發者線下培訓即將拉開帷幕!24年全球巡回培訓將覆蓋超10座城市及國家,為開發者提供一個深入學習RT-Thread嵌入式開發的絕佳機會。
    的頭像 發表于 08-07 08:35 ?1487次閱讀
    2024 <b class='flag-5'>RT-Thread</b>全球巡回 線下培訓火熱來襲!

    使用rt_thread_mdelay函數后出現hardfault的原因?

    問題:在一個線程中共有前后2部分使用rt_thread_mdelay()進行延時等待,前面部分延時是正常的,后面部分進入rt_thread_mdelay()函數后立馬打印hardfault錯誤,定位
    發表于 07-16 07:07

    lvgl移植到RT-Thread Nano后進入硬件錯誤中斷的原因?

    使用的是RT-Thread Nano的最新版,第一次移植,不知道是不是因為這個lvgl只能移植到標準版里? 嘗試過給lvgl的線程分配更大的棧,但是依舊會卡死在硬件錯誤中斷里。但只要把用戶的ui
    發表于 07-04 07:40

    6月6日杭州站RT-Thread線下workshop,探索RT-Thread混合部署新模式!

    6月6日下午我們將在杭州舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現同時運行RT-Thread和linux,本次workshop邀請到RT-Thread資深
    的頭像 發表于 05-28 08:35 ?480次閱讀
    6月6日杭州站<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    4月25日北京站RT-Thread線下workshop,探索RT-Thread混合部署新模式

    4月25日,下午我們將在北京舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現同時運行RT-Thread和linux,本次workshop邀請到RT-Thread資深
    的頭像 發表于 04-16 08:35 ?458次閱讀
    4月25日北京站<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式

    4月10日深圳場RT-Thread線下workshop,探索RT-Thread混合部署新模式!

    4月10日我們將在深圳福田舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現同時運行RT-Thread和linux,本次workshop邀請到RT-Thread資深嵌入式軟件工程師農曉明老師為您講
    的頭像 發表于 03-27 11:36 ?878次閱讀
    4月10日深圳場<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    4月10日深圳場RT-Thread線下workshop,探索RT-Thread混合部署新模式!

    4月10日我們將在深圳福田舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現同時運行RT-Thread和linux,本次workshop邀請到RT-Thread資深
    的頭像 發表于 03-27 08:34 ?573次閱讀
    4月10日深圳場<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    rt-thread是如何在線程運行結束后識別到的呢?

    我最近在仿寫rt-thread內核,在這個過程中對于它線程的處理有些疑惑 代碼如下 #include #define DBG_TAG \"main\" #define
    發表于 03-22 08:20

    RT-thread中運行了好多個線程,有的線程很長時間不執行是什么原因?

    RT-thread中運行了好多個線程,有的線程很長時間不執行,通過什么方式知道線程因為什么原因阻塞
    發表于 03-22 06:48

    線程中調用rt_thread_mdelay()函數程序卡死了怎么解決?

    線程中調用rt_thread_mdelay()函數程序卡死。搞了兩天也不知道問題出在哪,怎么解決。 int main(void) { interrupt_config
    發表于 02-26 08:39

    使用rt_thread nano有辦法查看線程的資源占用情況嗎?

    使用rt_thread nano ,有辦法查看線程的資源占用情況麼?
    發表于 02-26 06:05

    RT-Thread Nano在調用rt_thread_control時,修改線程優先級一直不執行的原因?如何解決?

    RT-Thread Nano在調用rt_thread_control時,修改線程優先級一直不執行
    發表于 02-23 07:32

    HC32L130F8UA移植rtthread后程序跑飛了,回不到1線程怎么解決?

    。 還有一種情況是這些初始化函數里面用的延時函數是單片機自帶文件的delay1ms函數,我在1線程中用rt_thread_delay()函數進行線程調度后,2
    發表于 02-23 06:04
    主站蜘蛛池模板: 99久久免费热在线精品 | 青青精品国产自在线拍 | 欧美一区二区三区久久综 | 亚洲伊人网站 | 无修肉动漫在线观看影片 | 亚洲男女羞羞无遮挡久久丫 | 精品午夜视频 | 欧美精品一区二区蜜臀亚洲 | 先锋资源久久 | 91国内精品久久久久免费影院 | 日本一区二区三区在线观看网站 | 久久久青青 | 2019久久这里只精品热在线观看 | 亚洲精品乱码8久久久久久日本 | 999在线观看精品免费 | 校花的奶好大好浪 | 国产在线精品亚洲第1页 | 失禁 调教 刺激 哭喊男男 | 97超级碰碰人妻中文字幕 | 久久99亚洲热最新地址获取 | 野花日本手机观看大全免费3 | 亚洲不卡一卡2卡三卡4卡5卡 | 一受n攻高h全肉np | 国产精品永久免费视频 | 99热久久视频只有精品6国产 | 国产亚洲国际精品福利 | 午夜福利免费院 | 蜜芽手机在线观看 | 国产精品黄色大片 | 国产毛A片啊久久久久久A | 又紧又大又爽精品一区二区 | 久久精品无码一区二区日韩av | 忘忧草在线社区WWW日本直播 | 欧美精品一区二区在线电影 | 欧美一区二区三区激情视频 | 美女一级毛片免费不卡视频 | 美女脱光app | 丰满的寡妇hd高清在线观看 | 国产亚洲精品网站在线视频 | 国产一区二区无码蜜芽精品 | 麻豆国产精品久久人妻 |