久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 偽操作系統(tǒng)胚胎版,分享大家會(huì)繼續(xù)完善 [打印本頁]

作者: hzn1990    時(shí)間: 2019-7-25 00:18
標(biāo)題: 偽操作系統(tǒng)胚胎版,分享大家會(huì)繼續(xù)完善

偽操作系統(tǒng)胚胎版,分享大家會(huì)繼續(xù)完善。

由于工作比較忙先分享原始版。以后在慢慢完善。大家一起交流。


/*
*   名稱:  Hzl_OS 0.01
*   說明:  偽操作系統(tǒng)(無任務(wù)切換)胚胎版
*           帶任務(wù)優(yōu)先級(jí)實(shí)時(shí)操作系統(tǒng)。
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <p24FJ128GA010.h>


#define   Task_Size      8
unsigned char Event_List[Task_Size];
unsigned char Task_PQH;
void (*Task_List[Task_Size])(void);


void Task0()                          //看門狗清理任務(wù)
{
    unsigned long s=0;
//Event_List[2]=1;    //發(fā)生事件
Event_List[0]=0;    //清除事件

//UART1_write(0x00);
}

void Task1()
{

UART1_write(0x01);
}




void Task2()
{
UART1_write(0x02);
}

void Task3()
{
UART1_write(0x03);
}

void Task4()
{
UART1_write(0x04);
}

void Task5()
{
UART1_write(0x05);
}


void Task6()    {
UART1_write(0x06);            
}

void Task7()       //空閑任務(wù)
{
  // Idle();
  //  UART1_write(0x07);
}



int main(int argc, char** argv)
{

    UART1Init();
    T1Iinit();


    Task_List[0]=Task0;     //初步化任務(wù)表
    Task_List[1]=Task1;
    Task_List[2]=Task2;
    Task_List[3]=Task3;
    Task_List[4]=Task4;
    Task_List[5]=Task5;
    Task_List[6]=Task6;
    Task_List[7]=Task7;



    for(Task_PQH=0;Task_PQH<Task_Size;Task_PQH++)   //初始化事件
    {
     Event_List[Task_PQH]=0;
    }


    while(1)
    {

      for(Task_PQH=0;Task_PQH<Task_Size-1;Task_PQH++)   //查找最高優(yōu)先級(jí)任務(wù)
       {
           if(Event_List[Task_PQH]>0)                   //有事件發(fā)生
               break;
       }


       Task_List[Task_PQH]();           //執(zhí)行任務(wù)
    }

    return (EXIT_SUCCESS);
}



void __attribute__((__interrupt__)) _T1Interrupt(void)     //10ms中斷
{
//    WriteTimer1(0);
    jp++;
    if(jp>=10)
    {
        jp=0;
    Event_List[0]=1;     //啟動(dòng)事件
    }


    IFS0bits.T1IF = 0;   
}


作者: hzn1990    時(shí)間: 2019-7-25 00:24
核心代碼就幾十行,用單片機(jī)測試基本能用。大家有什么問題和建議請留言。
作者: 鵬博士PBs    時(shí)間: 2019-7-25 11:02
樓主是基于linux操作系統(tǒng)的嗎
作者: hzn1990    時(shí)間: 2019-7-25 11:57
基于單片機(jī)的rtos
作者: 沒有你    時(shí)間: 2019-7-25 15:10
值得學(xué)習(xí)借鑒! 現(xiàn)在的好的系統(tǒng)功能太復(fù)雜了,反正不容易理解。這個(gè)挺容易理解的。while(1)死循環(huán)里面一直輪詢?nèi)蝿?wù)的執(zhí)行標(biāo)志,如果查詢到任務(wù)要執(zhí)行,就執(zhí)行函數(shù)。也可以去參考TI的OSAL,這個(gè)也是采用輪詢查詢?nèi)蝿?wù)的RTOS。
作者: hzn1990    時(shí)間: 2019-7-25 16:47
hzn1990 發(fā)表于 2019-7-25 11:57
基于單片機(jī)的rtos

task0優(yōu)先級(jí)最高,可以執(zhí)行清看門狗任務(wù)
task0最低,為空閑任務(wù),無事件可以讓單片機(jī)進(jìn)入休眠單片機(jī)低功耗也能保持實(shí)時(shí)性,中斷喚醒,彈射事件,執(zhí)行相關(guān)任務(wù)。
作者: 沒有你    時(shí)間: 2019-8-5 10:29
hzn1990 發(fā)表于 2019-7-25 16:47
task0優(yōu)先級(jí)最高,可以執(zhí)行清看門狗任務(wù)
task0最低,為空閑任務(wù),無事件可以讓單片機(jī)進(jìn)入休眠單片機(jī)低功 ...

兄弟,你的RTOS現(xiàn)在還有再更新嗎?
作者: hzn1990    時(shí)間: 2019-8-7 18:30
沒有你 發(fā)表于 2019-8-5 10:29
兄弟,你的RTOS現(xiàn)在還有再更新嗎?

論壇沒啥人氣沒積極性,在加上工作比較忙。以后慢慢完善。
作者: ddny    時(shí)間: 2019-8-21 21:54
感謝分享,正在學(xué)習(xí)中ing
作者: gym216    時(shí)間: 2019-9-1 11:07
經(jīng)典,謝謝分享。
作者: wdliming    時(shí)間: 2019-9-16 18:06
不錯(cuò),謝謝分享~~
作者: wdliming    時(shí)間: 2019-9-16 18:07
沒后文啊
作者: jianfeii    時(shí)間: 2019-11-12 09:41
沒看出來有優(yōu)先級(jí),還沒寫完吧這個(gè)程序
作者: hzn1990    時(shí)間: 2019-11-28 17:09
更新一下:

***************************************************************************
* 文件名稱: main.c
* 文件說明: 主函數(shù)
* 版本:     V0.10  Max 2019.8.15   創(chuàng)建
* 其他:     該文件不做編程
* ************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "Hos.h"
#include "DeviceDriver.h"
/*********配置位禁止修改**************/
__CONFIG(0x3FE4);
__CONFIG(0xFFF); //配置位
/************************************/
/***************************************************************************
* 函數(shù)名稱: int main(void)
* 函數(shù)說明: 主函數(shù)
* 參數(shù):     無
* 返回值:   無
* 版本:     V0.10  Max 2019.8.15   創(chuàng)建
* 其他:     禁止修改
* ************************************************************************/
int main(int argc, char** argv)
  {
     OSCCONbits.IRCF = 0b1111;          //禁止修改主頻--16mHz
    /**************************硬件初始化*********************************/
     Driver_Init();                     //驅(qū)動(dòng)初始化
   /*****************************系統(tǒng)*************************************/
     HOS_EventInit();                   //事件初始化
     HOS_AddTask();                     //添加任務(wù)表
     HOS_StartEvent();                  //任務(wù)啟動(dòng)事件彈射
     HOS_Run();                         //系統(tǒng)運(yùn)行
  /***********************************************************************/
     
    return (EXIT_SUCCESS);
}
// TO ---> Happ


/***************************************************************************
* 文件名稱: Hos.c
* 文件說明: 系統(tǒng)相關(guān)函
* 版本:     V0.10  Max 2019.8.15   創(chuàng)建
* 其他:     只能修改HOS_AddTask(void),HOS_StartEvent(void)
*************************************************************************/
#include "Hos.h"
#include "Happ.h"
/***************************************************************************
* 函數(shù)名稱: void HOS_AddTask(void)
* 函數(shù)說明: 添加函表
* 參數(shù):     無
* 返回值:   無
* 版本:     V0.10  Max 2019.8.15   創(chuàng)建
* 其他:     可修改添加函數(shù)
*************************************************************************/
void  HOS_AddTask(void)
   {
     Task_PCB[0].Task = Task0 ;                  //初始化函數(shù)
     Task_PCB[1].Task = Task1 ;                  //初始化函數(shù)
     Task_PCB[2].Task = Task2 ;                  //初始化函數(shù)
     Task_PCB[3].Task = Task3 ;                  //初始化函數(shù)
     Task_PCB[4].Task = Task4 ;                  //初始化函數(shù)
     Task_PCB[5].Task = Task5 ;                  //初始化函數(shù)
     Task_PCB[6].Task = Task6 ;                  //初始化函數(shù)
     Task_PCB[7].Task = Task7 ;                  //初始化函數(shù)
   }
/***************************************************************************
* 函數(shù)名稱: void  HOS_StartEvent(void)
* 函數(shù)說明: 發(fā)送啟動(dòng)事件
* 參數(shù):     無
* 返回值:   無
* 版本:     V0.10  Max 2019.8.15   創(chuàng)建
* 其他:     可修改添加啟動(dòng)事件
*************************************************************************/
void  HOS_StartEvent(void)
{
  
}
/***************************************************************************
* 函數(shù)名稱:  TypEvent  HOS_WriteEvent(uint8 PQH ,TypEvent EVENT  )
* 函數(shù)說明: 寫對應(yīng)任務(wù)的事件
* 參數(shù):     PQH    :任務(wù)優(yōu)先級(jí)
*            EVENT : 標(biāo)志事件
* 返回值:     無
* 版本:     V0.10  Max 2019.8.15   創(chuàng)建
* 其他:     禁止修改
*************************************************************************/
void  HOS_WriteEvent(uint8 PQH ,TypEvent EVENT )
{
   Task_PCB[PQH].Event |= EVENT ;
}
/***************************************************************************
* 函數(shù)名稱: TypEvent  HOS_ClearEvent(uint8 PQH ,TypEvent EVENT  )
* 函數(shù)說明: 清除任務(wù)的事件
* 參數(shù):     PQH    :任務(wù)優(yōu)先級(jí)
*            EVENT : 標(biāo)志事件
* 返回值:    無
* 版本:     V0.10  Max 2019.8.15   創(chuàng)建
* 其他:     禁止修改
*************************************************************************/
void  HOS_ClearEvent(uint8 PQH ,TypEvent EVENT  )
{
  Task_PCB[PQH].Event &= ~EVENT ;
}
/***************************************************************************
* 函數(shù)名稱: TypEvent   HOS_ReadEvent(uint8 PQH )
* 函數(shù)說明: 讀對應(yīng)任務(wù)的事件
* 參數(shù):     PQH    :任務(wù)優(yōu)先級(jí)
* 返回值:   returu :任務(wù)事件
* 版本:     V0.10  Max 2019.8.15   創(chuàng)建
* 其他:     禁止修改
* ************************************************************************/
TypEvent   HOS_ReadEvent(uint8 PQH )
{
   return Task_PCB[PQH].Event ;
}
/***************************************************************************
* 函數(shù)名稱: void HOS_Init(void)
* 函數(shù)說明: 系統(tǒng)初始化
* 參數(shù):     無
* 返回值:   無
* 版本:     V0.10  Max 2019.8.15   創(chuàng)建
* 其他:     禁止修改
* ************************************************************************/
void  HOS_EventInit(void)
{
     for(Task_PQH=0;Task_PQH<Task_Size-1;Task_PQH++)          //初始化事件表
      {
          Task_PCB[Task_PQH].Event = 0 ;
      }
}

/***************************************************************************
* 函數(shù)名稱: void HOS_Run(void)
* 函數(shù)說明: 任務(wù)運(yùn)行函數(shù)
* 參數(shù):     無
* 返回值:   無
* 版本:     V0.10  Max 2019.8.15   創(chuàng)建
* 其他:     禁止修改
* ************************************************************************/
void HOS_Run(void)
{
    while(1)                  //死循環(huán)
    {
       for(Task_PQH=0;Task_PQH<Task_Size-1;Task_PQH++)        //查找最高優(yōu)先級(jí)任務(wù)
        {
           if( Task_PCB[Task_PQH].Event > 0 )                 //有事件發(fā)生
               break;
         }
         Task_PCB[Task_PQH].Task(Task_PQH) ;                 //執(zhí)行任務(wù)
         
     }
  
}


/***************************************************************************
* 文件名稱: Hos.h
* 文件說明: 系統(tǒng)配置文件
* 版本:     V0.00  Max 2019.8.15   創(chuàng)建
* 其他:     
* ************************************************************************/
#ifndef HOS_H
#define HOS_H
/***************************************************************************/
typedef  unsigned char  uint8;
typedef  unsigned int   uint16;
typedef  unsigned char  TypEvent;           //事件類型8,16,32
/**************************************************************************/

#define   Task_Size      8               //任務(wù)數(shù)量0-255
uint8     Task_PQH;                      //優(yōu)先級(jí)寄存器(禁寫)
/*******************************任務(wù)屬性塊***********************************/
  struct
  {
   TypEvent  Event;                       //事件
   void (*Task)(uint8);                   //任務(wù)函數(shù)
   //可以擴(kuò)展添加任意數(shù)據(jù)
   }Task_PCB[Task_Size ] ;
/********************************系統(tǒng)函數(shù)***********************************/
  void  HOS_Run(void);
  void  HOS_EventInit(void);
  void  HOS_StartEvent(void);
  void  HOS_AddTask(void);
/*****************************事件操作函數(shù)**********************************/
  TypEvent   HOS_ReadEvent(uint8 PQH);
  void       HOS_ClearEvent(uint8 PQH ,TypEvent EVENT);
  void       HOS_WriteEvent(uint8 PQH ,TypEvent EVENT);
#endif /* HOS_H */









作者: hzn1990    時(shí)間: 2019-11-28 17:15
jianfeii 發(fā)表于 2019-11-12 09:41
沒看出來有優(yōu)先級(jí),還沒寫完吧這個(gè)程序

for(Task_PQH=0;Task_PQH<Task_Size-1;Task_PQH++)   //查找最高優(yōu)先級(jí)任務(wù)
       {
            if(Event_List[Task_PQH]>0)                   //有事件發(fā)生
               break;
        }

查找事件Task_PQH永遠(yuǎn)是從0開始的。如果有事件就退出并執(zhí)行那個(gè)函數(shù)。如果都沒有事件就執(zhí)行空閑任務(wù)。
作者: hui223    時(shí)間: 2020-3-3 19:54
收藏了
作者: hui223    時(shí)間: 2020-3-3 20:00
樓主 出個(gè)例程吧
作者: hui223    時(shí)間: 2020-4-7 21:52
已收藏
樓主還在?繼續(xù)完善
作者: rsx9583    時(shí)間: 2020-7-23 09:48
hui223 發(fā)表于 2020-3-3 20:00
樓主 出個(gè)例程吧

同意,不會(huì)用操作系統(tǒng)
作者: zhxzhx    時(shí)間: 2023-1-8 10:22
你這個(gè)可不行,在時(shí)間中斷里調(diào)用任務(wù)函數(shù),是很危險(xiǎn)的
作者: Angle145    時(shí)間: 2023-3-17 14:14
任務(wù)里你試試放個(gè)延時(shí)函數(shù),后面的代碼就運(yùn)行不到了
作者: li64331218    時(shí)間: 2023-3-23 19:49
實(shí)時(shí)系統(tǒng)小白,看不太懂,這跟裸機(jī)程序有什么優(yōu)勢嗎?
作者: lynn5302    時(shí)間: 2023-5-17 14:40
要加優(yōu)先級(jí)的話,對TASK加一個(gè)排序就行了,就可以了
作者: hzn1990    時(shí)間: 2023-11-7 14:08
zhxzhx 發(fā)表于 2023-1-8 10:22
你這個(gè)可不行,在時(shí)間中斷里調(diào)用任務(wù)函數(shù),是很危險(xiǎn)的

不能加長延時(shí)函數(shù),必須用延時(shí)事件來延時(shí)。
作者: hzn1990    時(shí)間: 2023-11-7 14:10
lynn5302 發(fā)表于 2023-5-17 14:40
要加優(yōu)先級(jí)的話,對TASK加一個(gè)排序就行了,就可以了

嗯,本身就是有優(yōu)先級(jí)的偽操作系統(tǒng),函數(shù)越靠前優(yōu)先級(jí)越高。
作者: hzn1990    時(shí)間: 2023-11-7 14:12
Angle145 發(fā)表于 2023-3-17 14:14
任務(wù)里你試試放個(gè)延時(shí)函數(shù),后面的代碼就運(yùn)行不到了

沒有任務(wù)切換,沒有出棧入棧,所以沒有系統(tǒng)延時(shí)函數(shù),只能用延時(shí)事件來延時(shí)。




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品久久久久不卡 | 亚洲 中文 欧美 日韩 在线观看 | 精品久 | caoporn国产精品免费公开 | 一级黄色录像片子 | 国产午夜精品一区二区三区 | 欧美日韩淫片 | 老司机成人在线 | 手机日韩 | 亚洲人成在线观看 | 毛片av免费在线观看 | 欧美精品国产一区二区 | 91在线视频| 精品一区电影 | 国产日韩亚洲欧美 | 91福利影院 | 在线播放国产一区二区三区 | 欧美日韩在线电影 | 国产精品久久久久久二区 | 欧美视频| 亚洲精品视频在线 | 日韩中文一区 | 国产黄视频在线播放 | 国产一级在线 | 人成久久| 欧美一级片在线看 | 日韩一区二区三区av | 在线观看免费观看在线91 | 国产成人一区二区三区久久久 | 日韩一区二区黄色片 | 欧美freesex黑人又粗又大 | 黑人一级黄色大片 | 91精品国产综合久久久久 | 日本午夜在线视频 | 久久久区 | 亚洲交性 | 久草色视频| 亚洲精品视频一区二区三区 | 久久精品国产99国产精品 | 免费超碰 | 亚洲一区欧美 |