在这个实时操作系统泛滥的年代,有这么一个系统封装接口层还是蛮有必要的。前些时间偶然间在STM32最新的固件库中就发现了这个系统封装接口,当时就把自己所用的系统进行封装。直到最近KEIL5.0发现其中所到的RTX系统也进行了同相的封装。对比了下感觉很有必要和大家分享一下。

采用这个接口层写程序,基本上可以说不用再去管所用的是什么操作系统。相同的代码可以轻而易举的移植到不同的实时系统中。不敢说完全没有改动,但绝对是最少的。其简洁的书写手法,也会给我的应用层带来视觉上的体验感,使用可以尽可能去关注应用。

下面先用uCOS-II系统接口为例进行简单概述:

这里是主要的配置区,你所用到哪些功能用0或1来选择和取消。由于有些和系统中宏配置有相同意思的宏配置,所以我这里直接用了系统配置中的宏。

这是所用不同系统时的主要不同处。其他地方就很少会改动了。

下面来举例来说明如何简单的使用这个接口。

首先进入main函数,官方样例代码:

   if (osKernelInitialize () != osOK) { // check osStatus for other possible valid values

         // exit with an error message

     }

     if (!osKernelRunning ()) { // is the kernel running ?

         if (osKernelStart () != osOK) { // start the kernel

             // kernel could not be started

         }

     }

进入首个函数中我们就需要建立任务

代码事例:

图上是RTX的接口代码所以,所用的栈地址,和栈大小有点不一样,uCOSII的是如下定义:

 static uint32_t taskLedStk[TASK_LED_STK_SIZE] = {};

 osThreadDef(TaskLed, TASK_LED_PRIO, taskLedStk, TASK_LED_STK_SIZE);

下面介绍信号量样例代码:

 osSemaphoreDef(LED_CTRL);           //定义信号量
osSemaphoreId osSem = NULL; //信号量句柄
osSem = osSemaphoreCreate(osSemaphore(LED_CTRL), ); //建立一个信号量 初值为0
osSemaphoreRelease(osSem); //释放一个信号量

定时回调函数事例代码:

 #include "cmsis_os.h"
void Timer1_Callback (void const *arg); // prototypes for timer callback function
void Timer2_Callback (void const *arg);
osTimerDef (Timer1, Timer1_Callback); // define timers
osTimerDef (Timer2, Timer2_Callback);
uint32_t exec1; // argument for the timer call back function
uint32_t exec2; // argument for the timer call back function
void TimerCreate_example (void) {
osTimerId id1; // timer id
osTimerId id2; // timer id
// Create one-shoot timer
exec1 = ;
id1 = osTimerCreate (osTimer(Timer1), osTimerOnce, &exec1);
if (id1 != NULL) {
// One-shoot timer created
}
// Create periodic timer
exec2 = ;
id2 = osTimerCreate (osTimer(Timer2), osTimerPeriodic, &exec2);
if (id2 != NULL) {
// Periodic timer created
}
:
}

好了, 这些只大概的进行说明。如果想知道更多的内容,你可以考虑安装keil5.0。如下图可以看到所有接口讲解和使用方法。

下面分享 我封装的uCOSII,uCOSIII这两个系统接口。本人做过测试,相同的应用程序在这两个系统运行的到相同的效果。

uCOSII

http://pan.baidu.com/s/1d1sCv

uCOSIII

http://pan.baidu.com/s/189zdP

样例工程

http://pan.baidu.com/s/17T1Ld

系统封装接口层 cmsis_os的更多相关文章

  1. Linux中断(interrupt)子系统之四:驱动程序接口层 & 中断通用逻辑层【转】

    转自:http://blog.csdn.net/droidphone/article/details/7497787 在本系列文章的第一篇:Linux中断(interrupt)子系统之一:中断系统基本 ...

  2. [官方软件] Easy Sysprep v4.3.29.602 【系统封装部署利器】(2016.01.22)--skyfree大神

    [官方软件] Easy Sysprep v4.3.29.602 [系统封装部署利器](2016.01.22) Skyfree 发表于 2016-1-22 13:55:55 https://www.it ...

  3. Skyfree的毕业论文 《系统封装与部署的深入研究》

    Skyfree的毕业论文 <系统封装与部署的深入研究> https://www.itsk.com/thread-197-1-4.html Skyfree 发表于 2007-9-13 07: ...

  4. 一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构-转

    表现层就是看到的东西,比如你现在看到的当前页面控制层就将你的请求从页面传到后台代码逻辑层就是处理你的请求的代码DAO层就是将数据存到数据库中的代码数据库就是数据库了,存东西用的 ,DAO层就是将访问数 ...

  5. Android应用程序框架层和系统运行库层日志系统源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6598703 在开发Android应用程序时,少 ...

  6. Why 使用TLS记录封装IP层VPN IS A Bad Idea

    一个很自然的想法,使用TLS套餐一IP数据报实现第三层VPN.这种想法必须经过深思熟虑的,但不幸的是,.这是一个错误的想法.有文章<Why TCP Over TCP Is A Bad Idea& ...

  7. 整合微信小程序的Web API接口层的架构设计

    在我前面有很多篇随笔介绍了Web API 接口层的架构设计,以及对微信公众号.企业号.小程序等模块的分类划分.例如在<C#开发微信门户及应用(43)--微信各个项目模块的定义和相互关系>介 ...

  8. Springboot学习06-Spring AOP封装接口自定义校验

    Springboot学习06-Spring AOP封装接口自定义校验 关键字 BindingResult.Spring AOP.自定义注解.自定义异常处理.ConstraintValidator 前言 ...

  9. Linux网络之设备接口层:发送数据包流程dev_queue_xmit

    转自:http://blog.csdn.net/wdscq1234/article/details/51926808 写在前面 本文主要是分析kernel-3.8的源代码,主要集中在Network的n ...

随机推荐

  1. rem的使用方法

    首先写入一下代码 <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" cont ...

  2. makefile编写---.so动态库的生成和调用

    http://blog.sina.com.cn/s/blog_559f6ffc0100fl3z.html  动静 http://blog.csdn.net/yuyunliuhen/article/de ...

  3. ASP.NET动态网站制作(25)-- ADO.NET(4)

    前言:这节课老师主要讲网页当中内容的分页效果,自己写一个分页控件. 内容: 1.首先写出HTML代码: <div id="pager"> <%=GetPagerH ...

  4. day10上节内容补充和初始函数

    1.上节内容补充 文件的删除和修改: #文件的删除和修改 #文件中全部都要修改 # with open('歌词',encoding='utf-8') as f1,open('歌词.bak','w',e ...

  5. CentOS7上elasticsearch5.0启动失败

    CentOS7上elasticsearch5.0启动失败 刚一启动完直接就退出了 $ ./elasticsearch ... ERROR: bootstrap checks failed max fi ...

  6. Oracle 逻辑体系

    Oracle 逻辑体系 主题 Oracle 逻辑体系 参考资料   Oracle 逻辑体系   表空间.模式.用户.段.区.块 Oracle中的数据逻辑上存储于表空间,物理上则存储于属于表空间tabl ...

  7. Nginx 启动、停止、平滑重启和平滑升级 graceful shutdown of worker processes

    Controlling nginx http://nginx.org/en/docs/control.html nginx can be controlled with signals. The pr ...

  8. stochastic matrix

    w Stochastic matrix - Wikipedia  https://en.wikipedia.org/wiki/Stochastic_matrix Suppose you have a ...

  9. JavaScript-onerror事件:图片加载失败后不显示

    HTML: <img src="http://www.mazey.net/images/upload/image/20170518/1495122198180663.gif" ...

  10. python通过数据库连接池实现mysql数据库增删改查

    import pymysql from DBUtils.PooledDB import PooledDB class SQLHandler(object): def __init__(self, ho ...