分享一个简洁易用的嵌入式操作系统内核

Posted 嵌入式大杂烩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分享一个简洁易用的嵌入式操作系统内核相关的知识,希望对你有一定的参考价值。

👇 关注「Linux大陆」,一起进步!👇

大家好,我是ZhengN。

现在,嵌入式操作系统已经越来越多了,如大家都熟知的uCOS、FreeRTOS、RT-Thread等。这些操作系统都各有各的特点,具体可阅读:?盘点一些嵌入式实时系统,你用过哪些?。本篇笔记再来给大家介绍一个简洁易用的嵌入式操作系统内核 —— KLite。

KLite源码

源码链接:

https://gitee.com/kerndev/klite

KLite的作者是jiangxiaogang。我们之前分享的?实用 | 手头上无LCD却又急着开发UI?LCD模拟器了解一下中介绍的模拟器也是这位大佬的作品。

KLite简介

KLite以MIT协议开放源代码。它是一款入门级的小型抢占式操作系统内核,以简洁易用为设计目标,旨在降低学习嵌入式操作系统编程和入门的难度。

简洁的API风格,简洁的调用方式,简单的移植方法,可能是目前最简单易用的嵌入式操作系统内核。

  • 支持优先级抢占

  • 支持相同优先级的线程

  • 支持线程同步互斥

  • 支持动态内存管理

  • 支持多编译器GCC, IAR, MDK

KLite移植

KLite目前已经为ARM Cortex-M0/M3/M4做好了底层适配,如果你的CPU平台是基于以上平台的,如STM32,GD32,NRF51,NRF52,Freescale K40等系列单片机,那么可以直接使用预编译的库文件进行开发。

只需要修改template.c里面几个简单的函数即可开始编程。否则可能需要自行移植CPU底层的汇编代码。

KLite使用

1、KLite编译

在build目录下面有预设的工程文件,选择你要使用的编译器和目标CPU平台,  编译完成后,会生成kernel.lib文件,将kernel.lib,kernel.h,emplate.c复制到你的项目源码中,使用lib文件可以减少重复编译时间,当然你也可以选择把全部源码添加到你的工程中。

2、修改template.c

根据目标CPU的编程手册,实现template.c里面的2个空函数。

void cpu_sys_init(void);

这个函数被kernel_init调用,为用户提供一个接口,用于实现那些必须在系统初始化之前的准备工作,例如初始化CPU的时钟,设置FLASH等。

void cpu_sys_idle(uint32_t time);

这个函数被kernel_idle调用,为用户提供一个接口,用于实现系统休眠.例如调用WFI指令,或者什么都不做。

void SysTick_Handler(void);

这个函数是平台相关的滴答时钟中断函数,需要在滴答时钟中断中调用kernel_tick(n),n表示一次中断的毫秒数。

3、在main函数里面添加初始化代码

main函数的推荐写法如下:

//只需要包含这一个头文件即可
#include "kernel.h"

//用于初始化应用程序的线程
void init(void *arg)
{

}

//空闲线程,只需调用kernel_idle即可
void idle(void *arg)
{
    kernel_idle();
}

//C语言程序入口
void main(void)
{
    static uint8_t heap[HEAP_SIZE];
    kernel_init((uint32_t)heap, HEAP_SIZE);
    thread_create(init, 0, 0);
    thread_create(idle, 0, 0);
    kernel_start();
}

说明:

  • kernel_init 用于初始化内核;

  • thread_create 创建主线程init和idle;

  • kernel_start 用于启动内核;

  • init是一个线程函数,在该函数中实现你的其它初始化代码.

  • 更多函数参数说明请参考API文档。

往期推荐:

嵌入式设计模式:有限状态自动机的C语言实现

不修车了!转行做单片机开发

在公众号聊天界面回复1024,可获取嵌入式资源;回复 m ,可查看文章汇总。

点击阅读原文,查看更多分享

以上是关于分享一个简洁易用的嵌入式操作系统内核的主要内容,如果未能解决你的问题,请参考以下文章

分享几个实用的代码片段(第二弹)

分享几个实用的代码片段(第二弹)

嵌入式project师考试知识点总结 微内核结构

分享&浅谈嵌入式系统应用热门的原因

学习 C 中的宏的建议

码云最有价值开源项目:EasyFlash