“我中华健儿,此次单刀赴会,万里关山,此刻国运艰难,愿诸君奋勇向前,愿来日我等后辈远离这般苦难!”
— 摘自1932年7月8日《大公报》
背景:1932年美国洛杉矶第十届奥运会上,此时的中国炮火连天,刘长春只身一人代表中国参加奥运会,这也是中国人第一次参加奥运会。
github 项目地址
NoOs 名字的寓意取自于:“NoOs is not an operating system”。NoOs 的目标是提供类似RTOS的开发方式,代码量比较小,使用简单易懂,占用资源非常小,适用于资源较小的嵌入式系统,能够帮助你快速实现产品。因为是纯 C 语言实现,易于移植到不同的平台。
遵循 Apache License 2.0 开源许可协议,可以免费在商业产品中使用,并且不需要公开私有代码。
NoOs 源代码的结构如下所示:
Name | Description |
---|---|
NoOs | NoOs 的源代码和头文件 |
外部使用的 API 极少,只有四个,所以使用起来相当的简单。
void InitNoOs(void);
描述:初始化 NoOs 系统。
void SchedulingTask(void);
描述:用于调度加入调度器的任务。
void InitNoOsTask(NoOsTaskDef NewTask, void(Callback)(void), uint32_t 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。
首先完成任务运行基础:
建立 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();}
}
实现效果如下所示:
敬请期待!
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小时内删除。
留言与评论(共有 0 条评论) |