任务调度算法

2023-05-16

可实现在单片机裸机下还能有很好的实时性


/* 任务调度器 */
_SCHEDULER_TASK scheduler_tasks[] = 
{
	{&P_loop_1000Hz,1000,  0, 0},
	{&P_loop_500Hz , 500,  0, 0},
	{&P_loop_200Hz , 200,  0, 0},
	{&P_loop_100Hz , 100,  0, 0},
	{&P_loop_50Hz  ,  50,  0, 0},
	{&P_loop_20Hz  ,  20,  0, 0},
	{&P_loop_2Hz   ,   2,  0, 0},
};


/* 计算线程数量 */
#define TASK_NUM (sizeof(scheduler_tasks)/sizeof(_SCHEDULER_TASK))

/*  初始化任务表  */
void Scheduler_Setup(void)
{
	u8 index = 0; 
	
	for(index=0; index<TASK_NUM; index++)
	{
		/* 计算每个任务的延时周期数 */
		scheduler_tasks[index].interval_ticks = 1000/scheduler_tasks[index].rate_hz;  
		
		/* 最小单位为1ms */
		if(scheduler_tasks[index].interval_ticks < 1)
		{
			scheduler_tasks[index].interval_ticks = 1;
		}
	}
	
}


void Scheduler_Run(void)
{
	u8 index = 0;
	
	for(index=0; index<TASK_NUM; index++)
	{
	
		u32 T_now = SysTick_GetTick();
		
		if(T_now - scheduler_tasks[index].last_run >= scheduler_tasks[index].interval_ticks)
		{
			scheduler_tasks[index].last_run = T_now;
			
			scheduler_tasks[index].task_func();
		}

	}
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

任务调度算法 的相关文章

随机推荐

  • 引入MybatisPlus与实操

    文章目录 1 MybatisPlus概述2 快速入门2 1 步骤 3 配置日志 1 MybatisPlus概述 特色 特性 无侵入 xff1a 只做增强不做改变 xff0c 引入它不会对现有工程产生影响 xff0c 如丝般顺滑 损耗小 xf
  • ubuntu清理硬盘空间

    移除不再需要的软件包 此选项可以删除 安装某个软件包时 自动安装的依赖库和包 xff0c 这些自动安装的依赖包在系统中通常是无用的 xff0c 浪费磁盘空间 但是如果报出很多ros相关的包最好谨慎一点 xff0c 以免误删 span cla
  • E: 仓库 “http://ppa.launchpad.net/gviz-adm/graphviz-dev/ubuntu bionic Release” 没有 Release 文件。N: 无法安全地

    通过换源无法解决 xff1a 打开软件和更新 选择其他软件 xff0c 里边有一个网址与报错的网址一样 xff0c 取消选择状态 完美解决 xff01 xff01
  • 计网笔记 网络层(中)

    前面的话 这篇文章继上一篇 xff0c 是关于网络层的其他知识的梳理 目录 1 划分子网 2 使用子网时分组的转发 3 无分类域间路由选择CIDR xff08 构造超网 xff09 4 网际控制报文协议ICMP 划分子网 前面讲到的两级IP
  • C++与C语言的区别

    1 C 43 43 的创建历程 xff1a 20世纪70年代中期 xff0c Bjarne Stroustrup在剑桥大学计算机中心工作 他使用过Simula和ALGOL xff0c 接触过C 他对Simula的类体系感受颇深 xff0c
  • moment的startOf、endOf使用

    moment的startOf endOf使用 举例 xff1a 今天的日期 xff1a 2020 04 14 16 41 startOf语法 xff1a moment startOf String 通过将原始的 moment 设置为时单位的
  • 133道Java面试题及答案(面试必看)

    Java 面试随着时间的改变而改变 在过去的日子里 xff0c 当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试 xff0c 但是现在问题变得越来越高级 xff0c 面试官问的问题也更深入 在我初入职
  • JS的test()方法

    解析 解释 xff1a js的test 方法用于检测一个字符串是否匹配某个格式 语法 xff1a RegExpObject test string 返回值 xff1a 如果String中含有RegExpObject中匹配的字符返回true
  • 实时获取当前时间并展示在页面上

    简介 实时获取当前时间并展示在页面上 xff0c 是很多地方常用的 xff1b 在页面中做此展示以便查看时间 本文使用js通过一个小的demo实现效果 完整Code span class token operator lt span spa
  • Visual Studio Code提交代码提示“Make sure you configure your ‘user.name‘ and ‘user.email‘ in git.”

    使用VSCode编译器提交代码到gitlab xff0c 编译器提示 Make sure you configure your 39 user name 39 使用编译器VSCode提交代码到GitLab xff0c 提示 Make sur
  • React编译代码报错提示:React was passed “javascript:;“。

    React编译代码提示报错信息 xff1a React编译代码提示报错信息 xff1a Warning A future version of React will block javascript URLs as a security p
  • 如何添加Iconfont图标到项目及创建新项目?

    1 搜索图标 或者 选择自己上传图标 2 选择图标 xff0c 加入库 3 点击购物车图标 xff0c 如果已经创建项目直接选择点击确定 xff1b 如果没有创建项目点击 43 创建项目 4 输入新项目名称 xff0c 点击确定 5 确定后
  • antd icon 图标组件的使用

    antd提供的icon有限 xff0c 可以直接使用iconfont图标库的图标 1 安装图标组件包 npm install save 64 ant design icons 2 创建图标 import createFromIconfont
  • 字符串解析为指定格式

    将 张三 李四 王五 赵六 解析为 张三 李四 xff08 共4人 xff09 使用 xff1a let str 61 39 张三 李四 王五 赵六 39 empsDeal str 39 张三 李四 共4人 39 方法 xff1a cons
  • 清除redux数据(hooks写法)

    清除redux数据的场景 A页面初始化调用A接口 xff0c 希望在当前页面生效 xff0c 跳转页面不保存数据 xff0c 但redux中已经存有历史数据 xff0c 所以在页面销毁时清除redux数据 A页面请求A接口 useEffec
  • 跳转页面方法

    跳转页面 window location href 61 url 替换当前页面 window location replace url
  • 嵌入式面试总结

    毕业一年多了 xff0c 从事嵌入式开发工作不知不觉也一年多了 xff0c 题主主要从事单片机 xff08 STM32 xff09 应用开发工业类电子方向 xff0c 纯技术涉及到的内容主要是C语言 arm STM32驱动 FreeRTOS
  • 数据库ER图基础概念整理

    ER图分为实体 属性 关系三个核心部分 实体是长方形体现 xff0c 而属性则是椭圆形 xff0c 关系为菱形 ER图的实体 xff08 entity xff09 即数据模型中的数据对象 xff0c 例如人 学生 音乐都可以作为一个数据对象
  • 如何成为一个全能的机器人工程师

    大疆技术总监 xff1a 如何用六年成为一个全能的机器人工程师 机器人学的核心问题是做好和物理世界的交互 现在主流的机器人学分支里 xff0c 处理与物理世界的交互的学科分为三类 xff1a 传感器和处理算法 xff1b 多刚体系统动力学控
  • 任务调度算法

    可实现在单片机裸机下还能有很好的实时性 任务调度器 SCHEDULER TASK scheduler tasks 61 amp P loop 1000Hz 1000 0 0 amp P loop 500Hz 500 0 0 amp P lo