cola_os学习笔记(上)

news2024/11/8 4:42:55

cola_os的学习笔记

声明

该项目系本人学习项目所做的笔记。该项目的项目地址为cola_os: 300行代码实现多任务管理的OS,在很多MCU开发中,功能很简单,实时性要求不强,如果使用RTOS显得太浪费,任务多了管理不当又很乱,所以才会想起做一个轮询的任务管理。简单好用!CSDN:https://blog.csdn.net/ziqi5543/article/details/101512722 (gitee.com)

为什么要学习cola_os

​ 这个软件架构是我无意间在csdn刷到的。通过学习cola_os,可以了解熟悉一个程序架构需要的部件、项目建设的流程和结构等,由于此项目不像linux一样是开源建设的大工程,该架构提供的大部分内容必然是程序架构必需的,触类旁通。本笔记侧重于对该架构的理解解读,对于作者已经阐述的内容,尽量不重复,一方面是尊重作者的原创内容,另外一方面是希望用自己的话讲述以更好地掌握知识。

常见的软件架构

​ 作者在文档中写道:“使用的框架为前后台和时间片相结合,同时参考rtthread和linux中优秀的思想设计而成,名为cola os。”我们需要快速地了解一下三种不同的软件架构。

顺序执行的前后台系统

中断:
{
	if(需要刷屏)
		刷一次屏幕;
	if(需要发出一声喵)
		喵;
}

int main()
{
	while(1)
	{
		switch(keynum)
		{
			case 刷屏键:
				需要刷屏了;
		}
	}
}

​ 通过刷屏的标志变量,在中断中响应用户的请求。这样的缺点随着任务的增加会暴露出来,就拿屏幕刷新来说,刷屏虽然响应得快,在刷屏后面顺序执行的内容要等他刷屏了才能得到执行,此外由于卡在中断里面,按键会变得不灵敏。

时间片轮询系统

我认为采用时标是时间片轮询系统相较于简单的前后台系统的显著特征。

1ms一次定时器:
{
	timecount1++;
	timecount2++;
}


int main()
{
	int a=0;
	while(1)
	{
		if(timecount1>20)
		{
			timecount1=0;
			if(++a>50)
			{
				a=0;
				printf("一秒\n");
			}
		}
		if(timecount2>2000)
		{
			timecount2=0;
			清屏;
		}
	}
}

需要注意:时标要注意清零。隔一段时间就调用一次函数,由此,函数内部就能获取到时间。需要频繁更新的内容依然需要放置到中断当中去,耗时的任务尽量不要频繁执行,不要放中断。

多任务操作系统

​ 这里不讨论Windows这种庞大复杂的操作系统,我认为操作系统的初衷是更好地分配资源,完成任务的调度。拿Freertos举例,核心思想是分发任务,立即响应,也就是实时操作系统 (Real-time operating system, RTOS ),又称即时操作系统,按键任务在定时器中定期执行,不分发对应的按键任务,比如说煮饭,煮饭任务就始终不会往下判断,这样减轻了mcu的负担。对比时间片轮询系统,我们可以看到,实际上系统开始运行,不管用户用没用到这个功能,都会扫描判断到,虽然说我们可以延后时标的判断时间,但是任务很多的时候这种消耗不好忽视。

​ Freertos的任务间通讯可以通过全局变量或队列,对共有资源的争取、线程之间的竞争、任务的资源分配等问题,都需要予以考虑。不是简单地移动一个模块的项目工程while(1)就可以完成的,如果你是要跟其他任务进行联动的话。这里给出我的一篇博客作为Freertos的写法参考:http://t.csdnimg.cn/yCTew

cola_os的软件架构

​ cola_os的软件架构主要由开发板bsp、cola_os系统特有(调度、定义…)、应用层(比如我把某个bsp内容拿来应用了)、main和config文件。这有点像linux,对io的操作封装成open()、close(),再上一层则是调用这些函数封装成某个任务或功能函数,供外部调用。

​ 在项目地址下载解压后打开下图所示的工程。


stm32命名开头的,或是命名中含有stm32的,是stm32单片机特有的内容,我们只需要关心该工程和其他项目的不同之处即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2072949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《行进中国大运河篇》圆满收官 郭品超讲述运河精神展文化自信

昨日,山东卫视大型文化探访综艺节目《行进中国大运河篇》圆满收官。节目中,演员郭品超携手行进团成员张晓谦和俞庚寅,一同从杭州出发,沿着京杭大运河一路向北,途径江苏、山东,河南、河北、天津等多个省市&a…

什么是主机监控审计系统?三款热门计算机监控审计系统推荐!

主机监控审计系统是保障企业IT基础设施安全的重要工具,通过实时监控、记录和分析主机上的活动,有效检测并预防潜在的安全威胁。 本文将首先简述主机监控审计系统的基本概念,并推荐三款热门的计算机监控审计系统,其中特别介绍安企…

歌曲分享平台|基于SprinBoot+vue的原创歌曲分享平台系统(源码+数据库+文档)

原创歌曲分享平台 目录 基于SprinBootvue的原创歌曲分享平台 一、前言 二、系统设计 三、系统功能设计 5.1平台功能模块 5.2后台功能模块 5.2.1管理员功能模块 5.2.2用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码…

ChatGPT协助论文写作各阶段指令示例

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 在学术论文写作过程中,我们经常面临选题、文献综述、研究设计、数据分析、写作润色等多方面的挑战。人工智能技术的发展为这些挑战提供了新的解决方案。ChatGPT作为一款强大…

Qt:玩转QPainter序列三

前言 接着序列三,图像的合成模式。 图像的合成模式(CompositionMode)是在讲述当多个图像重叠时重叠部分该如何显示的问题。 正文 先看合成模式的定义,下面是分析。 1. enum CompositionMode 这个枚举类型CompositionMode定义了多种图像合成模式。图…

AI作曲工具真的这么神奇?新手也能出音乐!

AI音乐创作工具不仅让专业音乐人有了更多灵感来源,也让普通人能够轻松实现自己的音乐梦想。本文将带你了解如何使用这些工具创作出属于自己的音乐作品。 选择适合的AI音乐创作工具 首先,你需要找到一个适合自己的AI音乐创作平台。市场上有许多选择&…

算法学习019 BFS实现迷踪步 c++算法学习 中小学算法思维学习 比赛算法题解 信奥算法解析

CBFS实现迷踪步 一、题目要求 1、编程实现 有一个 n 行 m 列的方格迷宫,用 0 表示可以通过,用 1 表示不可以通过,每一步可以向上、下、左、右任意方向移动一格,请计算从左上角(1,1)位置移动到右下角(n,m)…

算法的学习笔记—序列化二叉树(牛客JZ37)

😀前言 二叉树是数据结构中的一个重要概念,它在各种算法和应用中广泛使用。然而,当我们需要将二叉树保存到磁盘或在网络中传输时,需要将其转化为一种可存储和传输的格式——这就是序列化的作用。反之,反序列化则是将这…

一款好用且免费的PDF编辑软件:PDFelement

PDFelement是一款多功能的PDF编辑器,可以阅读、编辑、扫描、注释、转换、签名、合并、加密和打印PDF文档。 软件截图: 该版本已授权,可以使用全部功能。 使用说明: 1、将压缩文件解压到某固定位置,不要随意移动&…

视频质量诊断服务 视频质量诊断工具 图像/视频质量分析服务及工具 深度学习视频质量分析系统

文章目录 概要Mongoose介绍算法单机版测试工具算法服务的使用方法小结 概要 根据客户的需求,基于Mongoose平台搭建了视频质量服务系统,该系统主要的功能包含生成base64图像数据、接收post的数据参数推送、视频质量算法分析以及处理结果的推送功能&#x…

【论文阅读】NGD-SLAM: Towards Real-Time SLAM for Dynamic Environments without GPU

arxiv上一篇很新的视觉SLAM论文,能够在不使用GPU的情况下进行语义分割的辅助运算。 一、跟踪流程 作为一个语义结合的视觉SLAM,其基本的思路和以前看过的DynaSLAM基本类似,都是依赖语义分割模型对场景中动态的特征点进行剔除,这…

【OSCP系列】OSCP靶机-Dawn1(原创)

OSCP系列靶机—Dawn1 原文转载已经过授权 原文链接:Lusen的小窝 - 学无止尽,不进则退 (lusensec.github.io) 一、主机发现 这个靶机需要放在virtualBox 上,那么有关virtualBox 与 VMware 的kali网络通讯方法请访问:【基础知识】…

嵌入式软件开发的面试题

一、硬件电路 1.为什么电路一般使用220uf和104电容并联滤波 220μF电容通常被称为大电容,它具有较高的电容值,能够提供较好的低频滤波效果。它可以有效地滤除较低频率的噪声和干扰信号。这种电容在稳定电源电压、降低纹波和噪声方面非常有用。 另一方面,104电容是指电容值…

[matlab]MATLAB实现MLP多层感知机minist手写识别预测

【测试环境】 matlab2023a 【源码文件截图】 【实现部分代码】 mlp_test.m %% MLP 2-layer to test XOR clear; clc;Mode MNIST %Mode XORif (strcmp(Mode,MNIST))% Load the digits into workspace (MNIST Test, from% http://yann.lecun.com/exdb/mnist/)num_train 100…

el-date-picker 设置值输出格式

el-date-picker 设置值输出格式 现象 在请求后端的时候因为日期格式不对导致后端请求报错 看到时间默认的格式为:2024-08-13T16:00:00.000Z 这个时间如果需要转换成时间格式还是比较费劲的 解决方案 方式1-对字符串进行处理 formatDate(date) {// 格式化为 YY…

Java:常用API:Math类,System类

文章目录 Math常用方法代码 System类常用方法代码 RunTime类常用方法代码 黑马学习笔记 alt回车抛出异常 Math 常用方法 这是static方法,直接Math打点调方法 代码 package com.zhang.math;/*** Author: ggdpzhk* CreateTime: 2024-08-25* Math工具类的基本用法…

build.grade.kts 如何定义插件及插件扩展

定义插件和应用插件 在build.gradle.kts文件内 这里要注意的是&#xff0c;最后一行的Project扩展函数名必须要和上面apply方法里面create的参数一致&#xff0c;然后project扩展函数定义之前必须先apply<>()也就是先使用apply让plugin apply方法运行起来&#xff0c;才…

C++函数调用栈从何而来

竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生~ 个人主页&#xff1a; rainInSunny | 个人专栏&#xff1a; C那些事儿、 Qt那些事儿 文章目录 写在前面原理综述x86架构函数调用栈分析如何获取rbp寄存器的值总结 写在前面 程序员对函数调用栈是再熟悉不过了&#xff0c;无论是使用IDE…

printk的原理及使用

内核驱动调试的方法&#xff0c;先从我最常用的printk的使用方法开始讲起, printk在内核源码中用来记录日志信息的函数&#xff0c;方便我们调试追踪代码&#xff0c;只能在内核源码范围内使用。 本篇内核采用5.10版本。 很多内核开发者最喜欢的调试工具之一是printk(),printk(…

分享一个基于python新闻订阅与分享平台flask新闻发布系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…