stm32 Ctext-M3内核最简单的多任务RTOS
RTOS 实时操作系统,我做的是一个多任务的操作系统,可以同时运行多个任务,我这里设置的最大任务数是32个,
估计跑30多个任务的嵌入式设备很少吧,32个任务够用了。
OS我把它叫做HesOS,主要功能如下,比较简单。
1--实现多任务调度
2--实现任务调度锁
3--实现临界区保护
4--实现读取cpu使用率(这个功能比较重要的)
5--实现us延时(用于模拟如IIC总线模拟)
对于一般的嵌入式应用有这些功能,差不多够用了。
移植HesOS也非常简单,不会像其它的OS一样比较庞大,修改的地方也比较多,使用起来也复杂。
HesOS不管是移植和使用都是非常简单的,类似于PC的线程使用。
主函数初始化:系统一共跑了10个任务。
部分任务定义:
打印cpu使用量任务:
不能在所有任务里串口打印,因为串口打印非常的占用cpu,除非使用dma传输。
说一下移植,只需要实现以下代码
_uint32 fac_us;
//SysTick定时器
void set_systick(_uint32 ms)
{fac_us=SystemCoreClock/1000000; //不论是否使用OS,fac_us都需要使用SysTick->LOAD = ms * SystemCoreClock/1000-1;NVIC_SetPriority(SysTick_IRQn,(1<<__NVIC_PRIO_BITS)-1);SysTick->VAL = 0;SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk|SysTick_CTRL_TICKINT_Msk|SysTick_CTRL_ENABLE_Msk;}/*延时us这里裁剪的原子哥的*/
void delay_us(_uint32 nus)
{ _uint32 ticks;_uint32 told,tnow,tcnt=0;_uint32 reload=SysTick->LOAD; //LOAD的值 ticks=nus*fac_us; //需要的节拍数 told=SysTick->VAL; //刚进入时的计数器值while(1){tnow=SysTick->VAL; if(tnow!=told){ if(tnow<told)tcnt+=told-tnow; //这里注意一下SYSTICK是一个递减的计数器就可以了.else tcnt+=reload-tnow+told; told=tnow;if(tcnt>=ticks)break; //时间超过/等于要延迟的时间,则退出.} };
} //滴答中断必须调用以下代码,是关于任务调度的
void SysTick_Handler()
{if(now_task!=0) //如果当前任务不为空则执行任务调度{ //任务调度tran_delay();}
}
把工程下的HesOS.lib加入工程,HesOS系统文件只有这3个
具体可以参考实例工程:https://download.csdn.net/download/hes_c/10667667
说明:本RTOS是借鉴freeRTOS和原子哥部分代码,演示工程是原子哥的库函数点灯工程。
stm32 Ctext-M3内核最简单的多任务RTOS相关推荐
- Cortex-M0 (2)---Cortex-M的M0,M+,M3,M4,M7几种内核的简单区别
Cortex-M的M0,M+,M3,M4,M7几种内核的简单区别 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wuyuzun/article/de ...
- 关注Cortex-M处理器,M0、M3、M4简单对比
最近在关注Cortex-M处理器,针对目前进入大众视野的M0.M3.M4做了如下简单对比,内容来自ARM等官网,这里仅仅是整理了下,看起来更直观点,呵呵. Cortex-M 系列针对成本和功耗敏感的 ...
- M0、M3、M4简单对比
最近在关注Cortex-M处理器,针对目前进入大众视野的M0.M3.M4做了如下简单对比,内容来自ARM等官网,这里仅仅是整理了下,看起来更直观点,呵呵. Cortex-M 系列针对成本和功耗敏感的 ...
- STM32(CM3内核) 内存映射
这里写目录标题 STM32(CM3内核) 内存映射 一.CM3内核简介 二.CM3内核地址映射 三.搭建代码,实现映射 STM32(CM3内核) 内存映射 一.CM3内核简介 <CM3权威指南& ...
- 实现简单的多任务轮询(C语言)
实现简单的多任务轮询(C语言) 前言 总体思路 实现过程 调用示例 完整代码 前言 好久没有做MCU的项目了,最近因为工作需要接手一个STM32的项目,因为项目要求比较简单,也就没有用到操作系统,而是 ...
- Cortex M3内核架构
CortexM3内核架构 宗旨:技术的学习是有限的,分享的精神是无限的. 1.ARMCortex-M3处理器 Cortex-M3处理器内核是单片机的中央处理单元( CPU). 完整的基于CM3的MCU ...
- True FFS内核编程(简单笔记)
True FFS内核编程(简单笔记) 2006-08-22 19:22 True FFS内核编程 1 格式化FLASH 即使FLASH没有和块设备驱动绑定,也可对其进行格式化. tffsDevForm ...
- 【嵌入式小白学习】--在STM32开发板上实现简单的串口通信
嵌入式小白学习--在STM32开发板上实现简单的串口通信 这里写目录标题 嵌入式小白学习--在STM32开发板上实现简单的串口通信 Part1. STM32环境的搭建 Part2. 编写代码 Part ...
- 4.9一个简单的多任务内核实例
第四章第9节 本节描述了一个简单多任务内核的设计和实现方法,这个内核包括两个特权级3的用户任务和一个系统调用中断过程. 本节给出的内核实例由两个文件构成.一个是使用as86语言编制的引导启动程序boo ...
- 一步步学习操作系统(1)——参照ucos,在STM32上实现一个简单的多任务(“啰里啰嗦版”)...
该篇为"啰里啰嗦版",另有相应的"精简版"供参考 "不到长城非好汉:不做OS,枉为程序员" OS之于程序员,如同梵蒂冈之于天主教徒,那永远都 ...
最新文章
- IE6左右边框断线现象
- AIX 系统的启动和关机
- 03018_监听器Listener
- java 8 并行_Java 8新特性之 并行和并行数组(八恶人-8)
- 二级联动菜单ajax刷新,jquery json ajax 二级联动菜单实例
- jmeter 非gui 模式跑jmx
- 【剑指offer】面试题33:二叉搜索树的后序遍历序列
- 黑马出品代码生成器,超级好用,推荐
- Python少打字小技巧
- 课下作业——对正在使用的搜索类软件/输入法进行评价
- C#笔记05 方法和参数
- [转载]遗留系统中的RUBY中文解决方案
- 07-图5 Saving James Bond - Hard Version
- 网站SEO优化工具大全推荐-免费SEO优化工具
- OpenGL 实验一 绘制简单图形
- 比较文档相似度c语言,Doc2Vec,Word2Vec文本相似度 初体验。
- WindowsPhone8常见问题及使用技巧
- matlab magnify程序,magnifymatlab源程序
- 郑州大学微型计算机原理与接口技术,《微机原理及接口技术》第01章在线测试...
- 创维linux系统怎么上网,创维电视怎么看网络电视 该如何连接网络【图文】
热门文章
- python井字棋_python实现井字棋游戏
- c语言 分数通分,如何用C语言,实现简单的分数化简
- 数学分析-极值点、拐点
- 【复杂网络】最清晰最准确理解什么是“结构洞(Structural Hole)”?
- ps投影怎么做之教程:人像投影和物体长投影制作
- can not connect to mysql server翻译_Message:Can not connect to MySQL server的解决办法
- js日期减去日期算出剩余的天数
- windows上必备的提升效率的软件
- php公众号模板在哪,微信公众号模板哪里找?公众号如何套用模板?
- CF1299B Aerodynamic 题解