框架说明
通过模拟操作系统方式,实现C语言由过程化转为对象化,减少模块间的耦合度,便于移植与维护。作为一个C语言提升项目是一个很好的工程!
使用说明
下载工程后,工程本身是一个STM32F103RCT6工程,可以直接软件仿真。
下载后根据使用说明配置。
使用说明:
1、文件夹内容说明:
s_base:一些基础文件log、类型定义等
s_driver:外设驱动文件
s_sys:系统调用文件,每个任务的具体调用
2、使用方法:
1.先将s_base、s_driver、s_sys三个文件夹复制到自己的工程目录下,并包含相应头文件路径,在uart.c中实现log重定向;
2.新建USER文件夹,并增加App.c、App.h文件;
3.重写系统滴答函数,实现g_u64Sysclick自增,单位时间1ms
eg://重写滴答函数
void HAL_IncTick(void)
{
g_u64Sysclick++;
}
4.定义任务(以主任务为例,其它类似):
增加主任务级别及主任务结构体
#define APP_MTASK_LEVEL 1 // app 主任务级别
#define APP_STASK_LEVEL 0 // app 子任务级别
st_MainTask g_stMAppTsak; // 主应用任务
st_SubTask g_stSAppTask; // 子应用任务
写主任务运行函数
eg:// 主应用运行函数, 1s打印一次
// 软件仿真时为10s 一次
static void APP_Run(void *arg)
{
LOG.D("Test Build Time: %s %s\r\n", __DATE__, __TIME__);
Sys_Delay(1000);
}
写住任务初始化函数:
eg:static void APP_Init(void)
{
g_stMAppTsak.m_pid = APP_MTASK_LEVEL;
g_stSAppTask.m_sid = APP_STASK_LEVEL;
g_stSAppTask.m_name = appName;
g_stSAppTask.m_fun = APP_Run;
Sys_CreatTask(&g_stMAppTsak, &g_stSAppTask); //创建主应用
}
5.增加任务入口函数(此函数在main.c的while(1)中调用)
eg: //任务入口
void MainTask_Entrance(void)
{
Sys_InitTask(); //初始化任务
// LED_Init(); //运行灯初始化
APP_Init();
Sys_RunTask(); //运行任务
}
下载链接
链接:https://pan.baidu.com/s/1etGhk_6KPfP-7PyKX2tWFQ
提取码:q1w2