凯发真人娱乐

系统封装接口层 cmsis-凯发真人娱乐

2023-08-17,,

在这个实时操作系统泛滥的年代,有这么一个系统接口层还是蛮有必要的。前些时间偶然间在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的相关教程结束。

网站地图