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

嵌入式大杂烩 嵌入式大杂烩     2023-02-03     204

关键词:

👇 关注「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 ,可查看文章汇总。

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

持续更新一个简洁易用的美赛latex模板:easymcm(代码片段)

若您无意阅读下面的这番引入性介绍,想直接下载模板,请点这里。1当前美赛模板通行情况的概述美赛是许多大学生第一次接触(LaTeX)的机会,但是由于时间安排上的原因,很多人都是在赛前几天匆匆拾起(LaTeX)编译器决定用其排... 查看详情

linux新系统易用性向windows看齐

...https://osdn.net/projects/linuxlite/storage/5.8/linux-lite-5.8-64bit.iso该操作系统基于Ubuntu20.04.3开发,该发行版使用Linux内核5.4.0-96。但也可以使用其他内核,范围从3.13到5.16都可以自由安排。LinuxLite5.8还附带一些优秀的软件包,如Mo... 查看详情

excel终极总结分享基于npoi扩展封装的简易操作工具类库(简单灵活易用,支持导出导入上传等常见操作)

对于EXCEL的导入、导出,我之前已分享过多次,比如:第一种方案:《我写的一个ExcelHelper通用类,可用于读取或生成数据》这个主要是利用把EXCEL当成一个DB来进行获取数据,导出则是采用拼接成HTMLTABLE的方式,这种在ASP.NET,ASP... 查看详情

rtos系列——初识嵌入式实时操作系统

嵌入式实时操作系统是什么嵌入式实时操作系统是一个特殊的程序,是一个支持多任务的运行环境。嵌入式实时操作系统最大的特点就是“实时性”,如果有一个任务需要执行,实时操作系统会立即执行该任务,... 查看详情

内核编译与移植

在嵌入式Linux系统中,内核移植非常关键,没有Linux内核一切都是空谈,下面我们就来讨论一下Linux内核在S3C2416上的移植。首先,Linux是开源软件,其内核源代码可以直接到网站https://www.kernel.org/上下载。但Linux内核的版本非常之... 查看详情

嵌入式lab6:linux内核编译

...实际上是调用内核某个函数的过程。所以,为了告诉操作系统什么时候该用什么函数,需要在内核中进行一些修改。首先,你需要在内核中有一个这样的可执行的函数。在arch/arm/kernel中新建一个sys_mysyscall.c文件,... 查看详情

分享嵌入式内存管理的一些知识

...nux大陆」,一起进步!👇本文作者:度白嵌入式任何程序运行起来都需要分配内存空间存放该进程的资源信息的,C程序也不例外。C程序中的变量、常量、函数、代码等等的信息所存放的区域都有所不同,... 查看详情

待解决问题?

...入式LinuxBootloader的基本功能是:根据设定的参数直接引导操作系统启动和下载程序。在程序下载模式下,Bootloader能够完成内核、根文件系统的固化和更新,甚至实现Bootloader的自我更新。那么问题来了?我们可以通过哪些方式来... 查看详情

嵌入式rootfstransplantation

...的,文件系统简单的说就是一种目录结构,由于 linux操作系统的设备在系统中是以文件的形式存在,将这些文件进行分类管理以及提供和内核交互的接口,就形成一定的目录结构也就是文件系统,文件 查看详情

嵌入式linux文件系统保护

如果在消费类电子产品上需要运行一个操作系统,芯片公司经常会选择内核很小且移植性强的Linux。他们会有针对性地做一个裁剪版的Linux在非易失存储器如flash芯片上运行,而把丰富应用的实现交给专门的应用开发公司来做。现... 查看详情

人月神话_3

...为一个好的设计评判标准。然而这一点被广泛地误解了。操作系统OS/360由于其复杂强大的功能被它的开发者广为推崇。功能,而非简洁,总是被用来衡量设计人员工作的出色程度。而另一方面,PDP-10的时分系统由于它的简洁和概... 查看详情

freertos要学多长时间

...的多任务内核,而且没有任务数限制。FreeRTOS提供了实时操作系统所需的所有功能,包括资源管理、同步、任务通信等。FreeRTOS是用C和汇编来写的,其中绝大部分都是用C语言编写的,只有极少数的与处理器密切相关的部分代码才... 查看详情

《嵌入式操作系统内核调度》笔记:1操作系统基础知识

...高学习动力,可能是有潜在的交流作用吧。??为什么要有操作系统? 最初的时候其实是没有的,CPU的功能不就是执行指令吗,最初人们就写个程序让计算机去跑嘛,那时是没有操作系统观念的。后来,跑了一个程序, 查看详情

嵌入式bootloader和内核在flash上分布问题

大多是嵌入式均是首先把bootloader用烧写工具然后上电运行bootloader,让bootloader下载系统内核。能不能把bootloader和系统内核用烧写工具烧写到flash制定位置?这篇文章指引了我,希望它也能指引你近些年来,嵌入式系统的发展在国... 查看详情

转载:嵌入式系统开发步骤

...程序部署与配置系统(1)建立交叉开发环境开发主机的操作系统一般选用某一个发行版本号的linux系统,如RedHatlinux等。linux内核版本号能够依据项目的详细需求而定,如2.4内核或者2. 查看详情

[架构之路-28]:目标系统-系统软件-linuxos内核功能架构图解内核构建内核启动流程(代码片段)

...Linux概述1.1嵌入式系统简介1.2嵌入式系统的架构1.3什么是操作系统OS与主流操作系统1.4 什么是嵌入式操作系统1.5Linux操作系统1.6Linux操作系统的特点与好处1.7 Linux系统工具链完整1.8Linux内核第2章Linux内核为应用程序提供哪些服务2.... 查看详情

[架构之路-28]:目标系统-系统软件-linuxos内核功能架构图解内核构建内核启动流程(代码片段)

...Linux概述1.1嵌入式系统简介1.2嵌入式系统的架构1.3什么是操作系统OS与主流操作系统1.4 什么是嵌入式操作系统1.5Linux操作系统1.6Linux操作系统的特点与好处1.7 Linux系统工具链完整1.8Linux内核第2章Linux内核为应用程序提供哪些服务2.... 查看详情

linux系统最小化安装默认是()桌面的

...少设备的硬件成本。“你能做到多小?”这个问题通常在嵌入式工程师开始他们的项目时问到。大多数时候,问这个问题的人是想减少RAM和Flash资源,减少设备的单位成本或能源需求。因为Linux最初是为桌面或服务器系统设计的... 查看详情