chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

RT—thread線程調(diào)度詳解

嵌入式應(yīng)用開發(fā) ? 來源:嵌入式應(yīng)用開發(fā) ? 作者:嵌入式應(yīng)用開發(fā) ? 2022-05-19 17:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

系統(tǒng)調(diào)度就是在就緒列表中尋找優(yōu)先級最高的就緒線程,然后去執(zhí)行該線程。但是目前我們還不支持優(yōu)先級, 僅實(shí)現(xiàn)兩個線程輪流切換,系統(tǒng)調(diào)度函數(shù)rt_schedule

/* 系統(tǒng)調(diào)度 */
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)
    /* 產(chǎn)生上下文切換 */
    rt_hw_context_switch((rt_uint32_t)&from_thread->sp,(rt_uint32_t)&to_thread->sp);
}

主函數(shù)

/**
************************************************************************
* @file    main.c
* @author  fire
* @version V1.0
* @date    2018-xx-xx
* @brief   《RT-Thread內(nèi)核實(shí)現(xiàn)與應(yīng)用開發(fā)實(shí)戰(zhàn)指南》書籍例程
*
************************************************************************
* @attention
*
* 實(shí)驗(yàn)平臺:野火 STM32  M4系列開發(fā)板
*
* 官網(wǎng)    :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);

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

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

    /* 調(diào)度器初始化 */
    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) );  /* 線程棧大小,單位為字節(jié) */
    /* 將線程插入到就緒列表 */
    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) );  /* 線程棧大小,單位為字節(jié) */
    /* 將線程插入到就緒列表 */
    rt_list_insert_before( &(rt_thread_priority_table[1]),&(rt_flag2_thread.tlist) );

    /* 啟動系統(tǒng)調(diào)度器 */
    rt_system_scheduler_start();
}

/*
*************************************************************************
*                               函數(shù)實(shí)現(xiàn)
*************************************************************************
*/
/* 軟件延時 */
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();//                                (注意)
    }
}

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

    關(guān)注

    0

    文章

    74

    瀏覽量

    40686
  • 系統(tǒng)調(diào)用

    關(guān)注

    0

    文章

    28

    瀏覽量

    8607
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    使用rt_thread無法輸出PWM怎么解決?

    */ static rt_thread_t tid1 = RT_NULL;/* 線程句柄 */ struct rt_device_pwm *pwm_dev; /* PWM設(shè)備句柄
    發(fā)表于 10-14 07:05

    rt-thread studio 如何進(jìn)行多線程編譯?

    使用 rt-thread studio在工程配置 C/C++構(gòu)建->Behavior->parallel build數(shù)量修改,CPU的占用率沒有明顯的改變
    發(fā)表于 10-11 09:16

    RT-Thread Nano移植后動態(tài)創(chuàng)建線程創(chuàng)建不了怎么解決?

    RT-Thread Nano 移植后動態(tài)創(chuàng)建線程創(chuàng)建不了,靜態(tài)可以.直接燒錄DEMO也一樣,將RT_USING_HEAP開起來,使用動態(tài)創(chuàng)建就創(chuàng)建不起來,RT_USING_HEAP關(guān)掉
    發(fā)表于 09-19 06:28

    rtthread一直卡在rt_thread_idle_entry()的原因?

    我上面的代碼中如果加入rt_thread_delay就一直卡在rt_thread_idle_entry空閑線程,如果去掉rt_thread_delay就能正常打印,請問這是怎么回事。
    發(fā)表于 09-12 08:13

    跑官方的signal例程,執(zhí)行完signal回調(diào)函數(shù)后,調(diào)度器不可用,是什么原因?

    rt_thread_mdelay時,調(diào)度器竟然不可用了,程序無法執(zhí)行下去。不知道時什么原因?qū)е?b class='flag-5'>調(diào)度器不可用?求助大家。 | / - RT -Thr
    發(fā)表于 09-12 08:08

    線程刪除時遇到斷言,是什么原因?qū)е碌模?/a>

    不足? (rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread) assertion failed at
    發(fā)表于 09-12 06:08

    線程中調(diào)用rt_thread_mdelay()函數(shù)卡死的原因?怎么解決?

    線程中調(diào)用rt_thread_mdelay()函數(shù)程序卡死。搞了兩天也不知道問題出在哪,怎么解決。 int main(void) { interrupt_config
    發(fā)表于 09-11 08:11

    rt-thread-master內(nèi)新修改dev_serial_v2.c后導(dǎo)致finsh線程循環(huán)無調(diào)度怎么解決?

    finsh線程死循環(huán)無調(diào)度,繼而導(dǎo)致無法進(jìn)入空閑線程,導(dǎo)致看門狗復(fù)位。 從兩個截圖中發(fā)現(xiàn),減少了rt_wqueue_wait(&(device-&gt
    發(fā)表于 09-10 06:56

    rt-thread線程調(diào)用rt_thread_mdelay延時后再恢復(fù)運(yùn)行時thread會變,導(dǎo)致mutex釋放失敗,怎么解決?

    代碼片段如下: 運(yùn)行結(jié)果: 可以看到,在線程延時后,再恢復(fù)運(yùn)行時,用rt_thread_self函數(shù)獲取到的值與沒有延時時獲取到的值不一樣了,導(dǎo)致mutex無法釋放,其它等待這個mutex的線程都無法運(yùn)行了,應(yīng)該怎么處理這個
    發(fā)表于 09-09 08:06

    如何移植 RT-Thread Nano 并創(chuàng)建 2 個線程?

    基于 BSP 中的 GPIO_OutputInput 演示,展示了如何移植 RT-Thread Nano 并創(chuàng)建 2 個線程。
    發(fā)表于 08-19 07:45

    揭秘!基于RT-Thread探究“優(yōu)先級反轉(zhuǎn)”下的任務(wù)調(diào)度究竟是什么樣的?| 技術(shù)集結(jié)

    本文將基于RT-Thread,結(jié)合RT-Trace調(diào)試器細(xì)化到實(shí)際任務(wù)調(diào)度的粒度,來調(diào)試并逐步講解“優(yōu)先級反轉(zhuǎn)”的調(diào)度和運(yùn)行邏輯。如果對RT
    的頭像 發(fā)表于 08-17 10:07 ?2771次閱讀
    揭秘!基于<b class='flag-5'>RT-Thread</b>探究“優(yōu)先級反轉(zhuǎn)”下的任務(wù)<b class='flag-5'>調(diào)度</b>究竟是什么樣的?| 技術(shù)集結(jié)

    深度剖析 RT-Thread 線程調(diào)度流程

    RT-Thread調(diào)度第一個線程的主要流程分如下:rtthread_startup:RTT的啟動函數(shù),主要負(fù)責(zé)板級驅(qū)動,調(diào)度器,系統(tǒng)線程初始
    的頭像 發(fā)表于 06-25 18:24 ?1432次閱讀
    深度剖析 <b class='flag-5'>RT-Thread</b> <b class='flag-5'>線程</b><b class='flag-5'>調(diào)度</b>流程

    RT-Thread Nano移植后動態(tài)創(chuàng)建線程創(chuàng)建不了怎么處理?

    RT-Thread Nano移植后動態(tài)創(chuàng)建線程創(chuàng)建不了,靜態(tài)可以.直接燒錄DEMO也一樣,將RT_USING_HEAP開起來,使用動態(tài)創(chuàng)建就創(chuàng)建不起來,RT_USING_HEAP關(guān)掉后
    發(fā)表于 06-11 06:36

    請問rt-thread studio如何進(jìn)行多線程編譯?

    使用 rt-thread studio 在工程配置 C/C++構(gòu)建->Behavior->parallel build 數(shù)量修改,CPU的占用率沒有明顯的改變
    發(fā)表于 02-19 08:30

    如何將RT-Thread移植到NXP MCUXPressoIDE上

    RT-Thread默認(rèn)支持的IDE只有IAR 和 Keil, 那如何將RT-Thread移植到NXP MCUXPressoIDE上呢?本文內(nèi)容比較簡單但稍有瑣碎,希望對有需要的小伙伴有所幫助。
    的頭像 發(fā)表于 02-13 10:37 ?2422次閱讀
    如何將<b class='flag-5'>RT-Thread</b>移植到NXP MCUXPressoIDE上