|
更新一下:
***************************************************************************
* 文件名稱: 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ū)動初始化
/*****************************系統(tǒng)*************************************/
HOS_EventInit(); //事件初始化
HOS_AddTask(); //添加任務(wù)表
HOS_StartEvent(); //任務(wù)啟動事件彈射
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ā)送啟動事件
* 參數(shù): 無
* 返回值: 無
* 版本: V0.10 Max 2019.8.15 創(chuàng)建
* 其他: 可修改添加啟動事件
*************************************************************************/
void HOS_StartEvent(void)
{
}
/***************************************************************************
* 函數(shù)名稱: TypEvent HOS_WriteEvent(uint8 PQH ,TypEvent EVENT )
* 函數(shù)說明: 寫對應(yīng)任務(wù)的事件
* 參數(shù): PQH :任務(wù)優(yōu)先級
* 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)先級
* 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)先級
* 返回值: 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)先級任務(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)先級寄存器(禁寫)
/*******************************任務(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 */
|
|