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相关推荐

  1. Cortex-M0 (2)---Cortex-M的M0,M+,M3,M4,M7几种内核的简单区别

    Cortex-M的M0,M+,M3,M4,M7几种内核的简单区别 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wuyuzun/article/de ...

  2. 关注Cortex-M处理器,M0、M3、M4简单对比

    最近在关注Cortex-M处理器,针对目前进入大众视野的M0.M3.M4做了如下简单对比,内容来自ARM等官网,这里仅仅是整理了下,看起来更直观点,呵呵. Cortex-M 系列针对成本和功耗敏感的  ...

  3. M0、M3、M4简单对比

    最近在关注Cortex-M处理器,针对目前进入大众视野的M0.M3.M4做了如下简单对比,内容来自ARM等官网,这里仅仅是整理了下,看起来更直观点,呵呵. Cortex-M 系列针对成本和功耗敏感的  ...

  4. STM32(CM3内核) 内存映射

    这里写目录标题 STM32(CM3内核) 内存映射 一.CM3内核简介 二.CM3内核地址映射 三.搭建代码,实现映射 STM32(CM3内核) 内存映射 一.CM3内核简介 <CM3权威指南& ...

  5. 实现简单的多任务轮询(C语言)

    实现简单的多任务轮询(C语言) 前言 总体思路 实现过程 调用示例 完整代码 前言 好久没有做MCU的项目了,最近因为工作需要接手一个STM32的项目,因为项目要求比较简单,也就没有用到操作系统,而是 ...

  6. Cortex M3内核架构

    CortexM3内核架构 宗旨:技术的学习是有限的,分享的精神是无限的. 1.ARMCortex-M3处理器 Cortex-M3处理器内核是单片机的中央处理单元( CPU). 完整的基于CM3的MCU ...

  7. True FFS内核编程(简单笔记)

    True FFS内核编程(简单笔记) 2006-08-22 19:22 True FFS内核编程 1 格式化FLASH 即使FLASH没有和块设备驱动绑定,也可对其进行格式化. tffsDevForm ...

  8. 【嵌入式小白学习】--在STM32开发板上实现简单的串口通信

    嵌入式小白学习--在STM32开发板上实现简单的串口通信 这里写目录标题 嵌入式小白学习--在STM32开发板上实现简单的串口通信 Part1. STM32环境的搭建 Part2. 编写代码 Part ...

  9. 4.9一个简单的多任务内核实例

    第四章第9节 本节描述了一个简单多任务内核的设计和实现方法,这个内核包括两个特权级3的用户任务和一个系统调用中断过程. 本节给出的内核实例由两个文件构成.一个是使用as86语言编制的引导启动程序boo ...

  10. 一步步学习操作系统(1)——参照ucos,在STM32上实现一个简单的多任务(“啰里啰嗦版”)...

    该篇为"啰里啰嗦版",另有相应的"精简版"供参考 "不到长城非好汉:不做OS,枉为程序员" OS之于程序员,如同梵蒂冈之于天主教徒,那永远都 ...

最新文章

  1. IE6左右边框断线现象
  2. AIX 系统的启动和关机
  3. 03018_监听器Listener
  4. java 8 并行_Java 8新特性之 并行和并行数组(八恶人-8)
  5. 二级联动菜单ajax刷新,jquery json ajax 二级联动菜单实例
  6. jmeter 非gui 模式跑jmx
  7. 【剑指offer】面试题33:二叉搜索树的后序遍历序列
  8. 黑马出品代码生成器,超级好用,推荐
  9. Python少打字小技巧
  10. 课下作业——对正在使用的搜索类软件/输入法进行评价
  11. C#笔记05 方法和参数
  12. [转载]遗留系统中的RUBY中文解决方案
  13. 07-图5 Saving James Bond - Hard Version
  14. 网站SEO优化工具大全推荐-免费SEO优化工具
  15. OpenGL 实验一 绘制简单图形
  16. 比较文档相似度c语言,Doc2Vec,Word2Vec文本相似度 初体验。
  17. WindowsPhone8常见问题及使用技巧
  18. matlab magnify程序,magnifymatlab源程序
  19. 郑州大学微型计算机原理与接口技术,《微机原理及接口技术》第01章在线测试...
  20. 创维linux系统怎么上网,创维电视怎么看网络电视 该如何连接网络【图文】

热门文章

  1. python井字棋_python实现井字棋游戏
  2. c语言 分数通分,如何用C语言,实现简单的分数化简
  3. 数学分析-极值点、拐点
  4. 【复杂网络】最清晰最准确理解什么是“结构洞(Structural Hole)”?
  5. ps投影怎么做之教程:人像投影和物体长投影制作
  6. can not connect to mysql server翻译_Message:Can not connect to MySQL server的解决办法
  7. js日期减去日期算出剩余的天数
  8. windows上必备的提升效率的软件
  9. php公众号模板在哪,微信公众号模板哪里找?公众号如何套用模板?
  10. CF1299B Aerodynamic 题解