当前位置: 首页 > news >正文

400行程序写一个实时操作系统RTOS(开篇)

        笔者之前突发奇想,准备写一个极其微小的实时操作系统内核,在经过数天的努力后,这个RTOS诞生了。令读者比较意外的是,它的程序只有400行左右。但就是这短短的400行,完成了动态内存管理、多线程、优先级、低功耗管理、调度延时等功能。与FreeRTOS内核相比,它的功能已经大差不差了。

        麻雀虽小,五脏俱全。所以笔者给它命名为skRTOS_Sparrow,寓意它的微小性和灵活性。
 笔者准备把Sparrow作为一个学习用途的RTOS,并在接下来的博客中讲解它的原理,由于它只有内核,并不具有队列、信号量等应用,作为一个RTOS,它显然是不完整的,有兴趣的读者可以尝试自己完成。(笔者也许哪一天会添加这些功能,但具体是哪一天呢?笔者也不知道( > <)。 )
        好的,现在先让我们进行一个小实验:对sparrow进行移植并使用。

        读者需要一块单片机,比如stm32f103c8t6最小系统板。例如这种:

                                ​​​​​​​        
    如果读者需要sparrow的源码,可以到我的github:https://github.com/skaiui2/SKRTOS_sparrow/tree/source这里下载。
    下载完后,让我们打开cubemx:新建工程,mcu选择stm32f103c8t6。

rcc设置如下:

中断设置如下:

这里是重点!!!:不要设置为systicks时钟,这与RTOS是冲突的。debug要设置为serial wire,不然mcu下载后会卡死!

再把PC13设置为output:

时钟直接给72就完事了:

完成这些后,笔者可以点击新建工程了。现在让我们开始移植并且简简单单点个灯。

打开stm32f1xx_it.c文件,注释掉SVC_Handler 、PendSV_Handler、SysTick_Handler这三个中断。

笔者使用的编辑器是clion,不过没有任何区别,笔者用keil也是一样的。

keil是一个很好的开发软件,只是读者实在是受不了keil的画风才选择放弃keil。

现在读者打开sparrow源码,找到sparrow.c文件,直接ctrl a然后ctrl c复制全部代码,然后粘贴到main.c中,例如粘贴在

void SystemClock_Config(void);
static void MX_GPIO_Init(void);

这两行代码后面:

然后在task area开头的注释下面添加这些代码:


//Task Area!The user must create task handle manually because of debugging and specification
TaskHandle_t tcbTask1 = NULL;
TaskHandle_t tcbTask2 = NULL;void led_bright( )
{while (1) {HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);TaskDelay(1000);}
}void led_extinguish( )
{while (1) {HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);TaskDelay(500);}
}void APP( )
{xTaskCreate(    led_bright,128,NULL,2,&tcbTask1);xTaskCreate(    led_extinguish,128,NULL,3,&tcbTask2);
}

main函数这样写即可:

读者对代码进行编译,然后下载到单片机中,可以发现stm32f103c8t6上的PC13引脚开始一闪一闪亮发光。

以上就是skRTOS_Sparrow的移植及基本使用,笔者在接下来的博客中将会讲解它的原理,并且指导读者如何一步步写出一个sparrow RTOS!


http://www.mrgr.cn/news/48134.html

相关文章:

  • 我的 2024 年终总结
  • OCR(四)windows 环境基于c++的 paddle ocr 编译【GPU版本】
  • GitCode 光引计划投稿|MilvusPlus:开启向量数据库新篇章
  • 【时间之外】IT人求职和创业应知【74】-运维机器人
  • ansible play-book玩法
  • MacOS安装MySQL
  • Flutter技术学习
  • 大数据新视界 --大数据大厂之 ClickHouse:大数据分析领域的璀璨明星
  • ☕️从小工到专家的 Java 进阶之旅:全新的HttpClient,现代高效的网络通信利器
  • 每日OJ题_牛客_小乐乐改数字_模拟_C++_Java
  • 算法的收敛速度计算过程
  • 『网络游戏』进入游戏主城UI跳转主城【26】
  • Linux下的Makefile基本操作
  • Redis 的安装与部署(图文)
  • 中间件:SpringBoot集成Redis
  • FLBOOK一款强大的电子产品图册制作工具
  • springboot健康管理平台-计算机毕业设计源码38430
  • 【unity框架开发9】序列化字典,场景,vector,color,Quaternion
  • 孤独相伴 - 结婚十七年
  • 从数据到洞察:ChatGPT如何革新Python数据分析流程
  • 跟着深度学习好书实践tensorflow神经网络
  • NRF24L01原子HAl库学习
  • cuda实现gemm
  • numpy学习
  • 上门服务系统|上门服务小程序|上门服务系统成品
  • 2024系统分析师---试题四:论数据分片技术及其应用