标题:
MSP430G2553时间片轮询代码结构
[打印本页]
作者:
龙某人
时间:
2023-4-5 11:08
标题:
MSP430G2553时间片轮询代码结构
#include <msp430g2553.h>
#include <TimeSlice.h>
#include "gpio.h"
#include "uart.h"
int main(void)
{
// 停用看门狗定时器
WDTCTL = WDTPW + WDTHOLD;
/* User code init begin */
gpio_init();//GPIO初始化
uart_init();//串口初始化
/* User code init end */
// 初始化系统时钟和定时器
initClock();
initTimer();
// 启用全局中断
__enable_interrupt();
while(1)
{
// 在主循环中执行其他任务
// ...
TaskProcess(); //时间片任务处理函数
}
}
// Timer_A中断服务程序
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A_ISR(void)
{
// 在中断服务程序中执行需要定时的任务
// ...
TaskRemarks(); //时间片任务标志处理函数
}
/*
* TimeSlice.h
*
* Created on: 2023年3月31日
* Author: Long
* 如何使用:
* 1、将对应的.c和.h两个文件导入到代码工程里面
* 2、在main函数的while(1)里面调用TaskProcess(),调用时记得添加 -- #include "TimeSlice.h"
* 3、在系统时钟或者定时器里面调用TaskRemarks(),调用时记得添加 -- #include "TimeSlice.h"
* 4、在TimeSlice.c里面的task1()、task2()、task3()填写任务代码,可以根据实际需要自己添加新的任务函数
*/
#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();// 任务1
void Task2();// 任务2
void Task3();// 任务3
void TaskRemarks(void);//任务标志处理
void TaskProcess(void);//任务处理
#define TASKS_MAX 3
//----任务结构----
typedef struct _TASK_COMPONENTS
{
uint8 Run; // 程序运行标记:0-不运行,1运行
uint8 Timer; // 计时器
uint8 ItvTime; // 任务运行间隔时间
void (*TaskHook)(void); // 要运行的任务函数
} TASK_COMPONENTS; // 任务定义
////----任务清单----
//typedef enum _TASK_LIST
//{
// TASK1, //任务1
// TASK2, //任务2
// TASK3, //任务3
// // 这里添加你的任务。。。。
// TASKS_MAX // 总的可供分配的定时任务数目
//} TASK_LIST;
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
#endif /* TIMESLICE_TIMESLICE_H_ */
复制代码
#include <TimeSlice.h>
/**************************************************************************************
* Variable definition
* 在定义变量时,我们已经初始化了值,这些值的初始化,非常重要,跟具体的执行时间优先级等都有关系,这个需要自己掌握。
* 时间片的大小需要自己注意
**************************************************************************************/
TASK_COMPONENTS TaskComps[TASKS_MAX] =
{
{0, 60, 100, Task1}, // 任务1
{0, 20, 100, Task2}, // 任务2
{0, 30, 100, Task3}, // 任务3
// 这里添加你的任务。。。。
};
///**************************************************************************************
//* FunctionName : TimerInterrupt()
//* Description : 定时中断服务函数
//* EntryParameter : None
//* ReturnValue : None
//* 将定时中断服务函数放在定时器中断里面
//**************************************************************************************/
//void TimerInterrupt(void)
//{
// TaskRemarks( );
//}
/**************************************************************************************
* FunctionName : TaskRemarks()
* Description : 任务标志处理
* EntryParameter : None
* ReturnValue : None
* 任务运行标志出来,此函数就相当于中断服务函数,需要在定时器的中断服务函数中调用此函数,这里独立出来,并于移植和理解。
**************************************************************************************/
void TaskRemarks(void)
{
uint8 i;
for (i=0; i<TASKS_MAX; i++) // 逐个任务时间处理
{
if (TaskComps[i].Timer) // 时间不为0
{
TaskComps[i].Timer--; // 减去一个节拍
if (TaskComps[i].Timer == 0) // 时间减完了
{
TaskComps[i].Timer = TaskComps[i].ItvTime; // 恢复计时器值,从新下一次
TaskComps[i].Run = 1; // 任务可以运行
}
}
}
}
/**************************************************************************************
* FunctionName : TaskProcess()
* Description : 任务处理
* EntryParameter : None
* ReturnValue : None
* 此函数就是判断什么时候该执行那一个任务了,实现任务的管理操作,
* 应用者只需要在main()函数中调用此函数就可以了,并不需要去分别调用和处理任务函数。
**************************************************************************************/
void TaskProcess(void)
{
uint8 i;
for (i=0; i<TASKS_MAX; i++) // 逐个任务时间处理
{
if (TaskComps[i].Run) // 时间不为0
{
TaskComps[i].TaskHook(); // 运行任务
TaskComps[i].Run = 0; // 标志清0
}
}
}
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
void Task1()// 任务1
{
led1_toggle();
}
void Task2()// 任务2
{
led2_toggle();
}
void Task3()// 任务3
{
}
复制代码
代码:
G2_Basic.zip
(96.57 KB, 下载次数: 8)
2023-4-5 11:06 上传
点击文件名下载附件
MSP430G2553时间片轮询代码
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1