系统封装接口层 cmsis_os
在这个实时操作系统泛滥的年代,有这么一个系统封装接口层还是蛮有必要的。前些时间偶然间在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
uCOSIII
样例工程
系统封装接口层 cmsis_os的更多相关文章
- Linux中断(interrupt)子系统之四:驱动程序接口层 & 中断通用逻辑层【转】
转自:http://blog.csdn.net/droidphone/article/details/7497787 在本系列文章的第一篇:Linux中断(interrupt)子系统之一:中断系统基本 ...
- [官方软件] 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 ...
- Skyfree的毕业论文 《系统封装与部署的深入研究》
Skyfree的毕业论文 <系统封装与部署的深入研究> https://www.itsk.com/thread-197-1-4.html Skyfree 发表于 2007-9-13 07: ...
- 一个项目中说系统分为表现层、控制层、逻辑层、DAO层和最终数据库五层架构-转
表现层就是看到的东西,比如你现在看到的当前页面控制层就将你的请求从页面传到后台代码逻辑层就是处理你的请求的代码DAO层就是将数据存到数据库中的代码数据库就是数据库了,存东西用的 ,DAO层就是将访问数 ...
- Android应用程序框架层和系统运行库层日志系统源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6598703 在开发Android应用程序时,少 ...
- Why 使用TLS记录封装IP层VPN IS A Bad Idea
一个很自然的想法,使用TLS套餐一IP数据报实现第三层VPN.这种想法必须经过深思熟虑的,但不幸的是,.这是一个错误的想法.有文章<Why TCP Over TCP Is A Bad Idea& ...
- 整合微信小程序的Web API接口层的架构设计
在我前面有很多篇随笔介绍了Web API 接口层的架构设计,以及对微信公众号.企业号.小程序等模块的分类划分.例如在<C#开发微信门户及应用(43)--微信各个项目模块的定义和相互关系>介 ...
- Springboot学习06-Spring AOP封装接口自定义校验
Springboot学习06-Spring AOP封装接口自定义校验 关键字 BindingResult.Spring AOP.自定义注解.自定义异常处理.ConstraintValidator 前言 ...
- Linux网络之设备接口层:发送数据包流程dev_queue_xmit
转自:http://blog.csdn.net/wdscq1234/article/details/51926808 写在前面 本文主要是分析kernel-3.8的源代码,主要集中在Network的n ...
随机推荐
- python笔记1,语法,函数,类和实例,异常
>>> int(12.34) 12 >>> float('12.34') 12.34 >>> str(1.23) '1.23' >>& ...
- 【转】Monkey测试5-运行中停止monkey
停止monkey自动测试步骤: 1.ps命令 查找uiautomator的进程 打开cmd命令行窗口 输入: adb shell ; ps | grep monkey; 返回来的第一个数字,即是mo ...
- HTML5实现端访问时禁止放大和缩小网页
<title>html5禁止和移动.缩放网页</title><meta name="viewport" content="width=dev ...
- Servlet HTTP 状态码
HTTP 请求和 HTTP 响应消息的格式是类似的,结构如下: 初始状态行 + 回车换行符(回车+换行) 零个或多个标题行+回车换行符 一个空白行,即回车换行符 一个可选的消息主体,比如文件.查询数据 ...
- load data导入数据之csv的用法
今天总结一下:csv格式文件导入的方法. 1.准备数据表:CSV
- 各种流程图的绘画网路工具 processon
https://www.processon.com 对应的网址,类似在线viso 很方便使用,工具齐全,推荐使用!
- firefox(火狐)怎么关闭鼠标拖拽搜索
工具-附加组件-卸载<附加组件管理器> 即可. 这玩意真心坑爹,起这个名字的人绝对是吃屎了,这名字怎么和鼠标拖拽混到一起的 !!! 关键字:火狐:鼠标:鼠标拖拽:鼠标手势:关闭
- VC++ 汇编相关的东西
Tips: VC++在新建一个.asm文件后必须重新导入project中才能进行编译. 下面是一个汇编与C++相互调用的例子: Main.cpp #include <stdio.h> #i ...
- CF 617E【莫队求区间异或和】
E. XOR and Favorite Number time limit per test 4 seconds memory limit per test 256 megabytes input s ...
- outlook撤回已发送邮件
官方教程参考: https://support.office.com/zh-cn/article/%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6%E5%90%8E%E6%92 ...