欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
MSP430G2553時(shí)間片輪詢代碼結(jié)構(gòu)
[打印本頁(yè)]
作者:
龍某人
時(shí)間:
2023-4-5 11:08
標(biāo)題:
MSP430G2553時(shí)間片輪詢代碼結(jié)構(gòu)
#include <msp430g2553.h>
#include <TimeSlice.h>
#include "gpio.h"
#include "uart.h"
int main(void)
{
// 停用看門狗定時(shí)器
WDTCTL = WDTPW + WDTHOLD;
/* User code init begin */
gpio_init();//GPIO初始化
uart_init();//串口初始化
/* User code init end */
// 初始化系統(tǒng)時(shí)鐘和定時(shí)器
initClock();
initTimer();
// 啟用全局中斷
__enable_interrupt();
while(1)
{
// 在主循環(huán)中執(zhí)行其他任務(wù)
// ...
TaskProcess(); //時(shí)間片任務(wù)處理函數(shù)
}
}
// Timer_A中斷服務(wù)程序
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A_ISR(void)
{
// 在中斷服務(wù)程序中執(zhí)行需要定時(shí)的任務(wù)
// ...
TaskRemarks(); //時(shí)間片任務(wù)標(biāo)志處理函數(shù)
}
/*
* TimeSlice.h
*
* Created on: 2023年3月31日
* Author: Long
* 如何使用:
* 1、將對(duì)應(yīng)的.c和.h兩個(gè)文件導(dǎo)入到代碼工程里面
* 2、在main函數(shù)的while(1)里面調(diào)用TaskProcess(),調(diào)用時(shí)記得添加 -- #include "TimeSlice.h"
* 3、在系統(tǒng)時(shí)鐘或者定時(shí)器里面調(diào)用TaskRemarks(),調(diào)用時(shí)記得添加 -- #include "TimeSlice.h"
* 4、在TimeSlice.c里面的task1()、task2()、task3()填寫任務(wù)代碼,可以根據(jù)實(shí)際需要自己添加新的任務(wù)函數(shù)
*/
#ifndef TIMESLICE_TIMESLICE_H_
#define TIMESLICE_TIMESLICE_H_
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <msp430g2553.h>
/* USER CODE END Includes */
typedef unsigned char uint8;
void Task1();// 任務(wù)1
void Task2();// 任務(wù)2
void Task3();// 任務(wù)3
void TaskRemarks(void);//任務(wù)標(biāo)志處理
void TaskProcess(void);//任務(wù)處理
#define TASKS_MAX 3
//----任務(wù)結(jié)構(gòu)----
typedef struct _TASK_COMPONENTS
{
uint8 Run; // 程序運(yùn)行標(biāo)記:0-不運(yùn)行,1運(yùn)行
uint8 Timer; // 計(jì)時(shí)器
uint8 ItvTime; // 任務(wù)運(yùn)行間隔時(shí)間
void (*TaskHook)(void); // 要運(yùn)行的任務(wù)函數(shù)
} TASK_COMPONENTS; // 任務(wù)定義
////----任務(wù)清單----
//typedef enum _TASK_LIST
//{
// TASK1, //任務(wù)1
// TASK2, //任務(wù)2
// TASK3, //任務(wù)3
// // 這里添加你的任務(wù)。。。。
// TASKS_MAX // 總的可供分配的定時(shí)任務(wù)數(shù)目
//} TASK_LIST;
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
#endif /* TIMESLICE_TIMESLICE_H_ */
復(fù)制代碼
#include <TimeSlice.h>
/**************************************************************************************
* Variable definition
* 在定義變量時(shí),我們已經(jīng)初始化了值,這些值的初始化,非常重要,跟具體的執(zhí)行時(shí)間優(yōu)先級(jí)等都有關(guān)系,這個(gè)需要自己掌握。
* 時(shí)間片的大小需要自己注意
**************************************************************************************/
TASK_COMPONENTS TaskComps[TASKS_MAX] =
{
{0, 60, 100, Task1}, // 任務(wù)1
{0, 20, 100, Task2}, // 任務(wù)2
{0, 30, 100, Task3}, // 任務(wù)3
// 這里添加你的任務(wù)。。。。
};
///**************************************************************************************
//* FunctionName : TimerInterrupt()
//* Description : 定時(shí)中斷服務(wù)函數(shù)
//* EntryParameter : None
//* ReturnValue : None
//* 將定時(shí)中斷服務(wù)函數(shù)放在定時(shí)器中斷里面
//**************************************************************************************/
//void TimerInterrupt(void)
//{
// TaskRemarks( );
//}
/**************************************************************************************
* FunctionName : TaskRemarks()
* Description : 任務(wù)標(biāo)志處理
* EntryParameter : None
* ReturnValue : None
* 任務(wù)運(yùn)行標(biāo)志出來(lái),此函數(shù)就相當(dāng)于中斷服務(wù)函數(shù),需要在定時(shí)器的中斷服務(wù)函數(shù)中調(diào)用此函數(shù),這里獨(dú)立出來(lái),并于移植和理解。
**************************************************************************************/
void TaskRemarks(void)
{
uint8 i;
for (i=0; i<TASKS_MAX; i++) // 逐個(gè)任務(wù)時(shí)間處理
{
if (TaskComps[i].Timer) // 時(shí)間不為0
{
TaskComps[i].Timer--; // 減去一個(gè)節(jié)拍
if (TaskComps[i].Timer == 0) // 時(shí)間減完了
{
TaskComps[i].Timer = TaskComps[i].ItvTime; // 恢復(fù)計(jì)時(shí)器值,從新下一次
TaskComps[i].Run = 1; // 任務(wù)可以運(yùn)行
}
}
}
}
/**************************************************************************************
* FunctionName : TaskProcess()
* Description : 任務(wù)處理
* EntryParameter : None
* ReturnValue : None
* 此函數(shù)就是判斷什么時(shí)候該執(zhí)行那一個(gè)任務(wù)了,實(shí)現(xiàn)任務(wù)的管理操作,
* 應(yīng)用者只需要在main()函數(shù)中調(diào)用此函數(shù)就可以了,并不需要去分別調(diào)用和處理任務(wù)函數(shù)。
**************************************************************************************/
void TaskProcess(void)
{
uint8 i;
for (i=0; i<TASKS_MAX; i++) // 逐個(gè)任務(wù)時(shí)間處理
{
if (TaskComps[i].Run) // 時(shí)間不為0
{
TaskComps[i].TaskHook(); // 運(yùn)行任務(wù)
TaskComps[i].Run = 0; // 標(biāo)志清0
}
}
}
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
void Task1()// 任務(wù)1
{
led1_toggle();
}
void Task2()// 任務(wù)2
{
led2_toggle();
}
void Task3()// 任務(wù)3
{
}
復(fù)制代碼
代碼:
G2_Basic.zip
(96.57 KB, 下載次數(shù): 8)
2023-4-5 11:06 上傳
點(diǎn)擊文件名下載附件
MSP430G2553時(shí)間片輪詢代碼
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1