NoOs

阅读: 评论:0

NoOs

NoOs

“我中华健儿,此次单刀赴会,万里关山,此刻国运艰难,愿诸君奋勇向前,愿来日我等后辈远离这般苦难!”
— 摘自1932年7月8日《大公报》
背景:1932年美国洛杉矶第十届奥运会上,此时的中国炮火连天,刘长春只身一人代表中国参加奥运会,这也是中国人第一次参加奥运会。

NoOs

文章目录

  • NoOs
    • 简介
    • 代码目录
    • API 说明
    • 移植
    • 快速上手
    • 更多示例
    • License

简介

github 项目地址

NoOs 名字的寓意取自于:“NoOs is not an operating system”。NoOs 的目标是提供类似RTOS的开发方式,代码量比较小,使用简单易懂,占用资源非常小,适用于资源较小的嵌入式系统,能够帮助你快速实现产品。因为是纯 C 语言实现,易于移植到不同的平台。

遵循 Apache License 2.0 开源许可协议,可以免费在商业产品中使用,并且不需要公开私有代码。

代码目录

NoOs 源代码的结构如下所示:

NameDescription
NoOsNoOs 的源代码和头文件

API 说明

外部使用的 API 极少,只有四个,所以使用起来相当的简单。

  • void InitNoOs(void);

    描述:初始化 NoOs 系统。

  • void SchedulingTask(void);

    描述:用于调度加入调度器的任务。

  • void InitNoOsTask(NoOsTaskDef NewTask, void(Callback)(void), uint32_t InitTick);

    描述:用于初始化新的任务并将其加入调度器。

    输入参数:

    • NewTask:新任务
    • Callback:新任务的回调函数
    • InitTick:每运行一次任务需要等待的系统时钟心跳的次数
  • uint32_t GetNoOsTick(void);

    描述:获取系统时钟心跳的次数。

移植

因为 NoOs 是纯 C 语言实现的,所以在不同的硬件设备间移植起来很简单。

详细移植过程如下所示:

  • 将源代码目录中的 NoOs.c 加入项目工程目录。

    以 STM32 在 Keil MDK5 开发为例:

  • 将源代码目录中的 NoOs.h 加入项目工程头文件包含路径。

    以 STM32 在 Keil MDK5 开发为例:

  • 在 main.c 函数中加入 InitNoOs() 函数,用于初始化 NoOs 系统,在无限循环 While(1) 中调用 SchedulingTask() 函数,用于调度任务。
    以 STM32 在 Keil MDK5 开发为例:

    #include "NoOs.h"int main(void)
    {/* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* Configure the system clock */SystemClock_Config();/* Initialize all configured peripherals */MX_GPIO_Init();/* Init NoOs */InitNoOs();while (1){SchedulingTask();}
    }
    

快速上手

以建立一个 LED 闪烁显示的任务为例,使用的硬件依然是 STM32。

首先完成任务运行基础:

  • 使用 STM32CubeMx 建立 STM32 工程,完成基本设置,配置好 LED 控制引脚 对应的 GPIO 引脚,设置 SysTick 时钟,默认是 1ms 中断一次。
  • 按上节移植过程配置好 NoOs 运行的基本条件。

建立 LED 显示任务:

  • 定义 LED 任务的结构体

    NoOsTaskDef LedDisplayTask;
    
  • 定义 LED 任务的回调函数(其中GetNoOsTick()用于实现非阻塞延时),功能是让 LED 灯 1Hz 频率闪烁。

    void LedDisplayCallback(void)
    {static uint32_t LedDelayTick;if((GetNoOsTick() - LedDelayTick) > 500){LedDelayTick = GetNoOsTick();HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8);}
    }
  • 在 main() 中的 InitNoOs() 后调用任务初始化函数,成功将其加入任务调度中。

    InitNoOsTask(&LedDisplayTask, LedDisplayCallback, 1); 
    

下面是完整的代码:

#include "NoOs.h"NoOsTaskDef LedDisplayTask;void LedDisplayCallback(void)
{static uint32_t LedDelayTick;if((GetNoOsTick() - LedDelayTick) > 500){LedDelayTick = GetNoOsTick();HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8);}
}int main(void)
{/* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* Configure the system clock */SystemClock_Config();/* Initialize all configured peripherals */MX_GPIO_Init();/* Init NoOs */InitNoOs();/* Init LedDisplay task */InitNoOsTask(&LedDisplayTask, LedDisplayCallback, 1); while (1){SchedulingTask();}
}

实现效果如下所示:

更多示例

敬请期待!

License

NoOs 是一个开源软件,遵循 Apache-2.0 许可版本。许可证信息和版权信息一般可以在代码的开头看到::

/** Copyright (c) 2021, Eureka1024 <eureka1024@qq>** SPDX-License-Identifier: Apache-2.0** ......*/

本文发布于:2024-02-05 06:45:36,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170726594564035.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:NoOs
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23