cola_os学习笔记(上)

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单片机特有的内容,我们只需要关心该工程和其他项目的不同之处即可。

cola_os学习笔记(下)

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

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

相关文章

Anaconda3简介与安装步骤

目录 Anaconda3简介与功能 1.Anaconda3简介 2.主要功能和特点 3.使用场景 4.总结 Anaconda3安装 1.Anaconda3下载 1.1我的百度网盘 1.2官网下载 1.2.1访问官网 1.2.2输入邮箱 1.2.3登录你的邮箱下载(你的噶) 2.安装 2.1双击安装 2.2选择安…

计算机视觉编程 3(图片处理)

目录 图像差分 高斯差分 形态学-物体计数 ​编辑 图片降噪 图像差分 # -*- coding: utf-8 -*- from PIL import Image from pylab import * from scipy.ndimage import filters import numpy# 添加中文字体支持 from matplotlib.font_manager import FontProperties font…

VMWare中添加Ubuntu20.04.06镜像

一、下载Ubuntu镜像 Ubuntu20.04: 官方下载地址https://releases.ubuntu.com/20.04.6/ 进入官网 点击下图红框位置,下载镜像镜像名为ubuntu-20.04.6-desktop-amd64.iso 也可点击下面链接直接下载:https://releases.ubuntu.com/20.04.6/ubu…

车间多台分散PLC如何在不同协议的情况下实现无线通讯?

项目背景 为推动企业智能化数字化升级,积极响应节能减排与能源可持续发展的号召,进一步增强企业竞争力,同时为避免大幅度电缆铺设及维护工作,厂区需要针对目前的燃煤发电作业进行技术及流程的无线改造。通过这些无线技改措施的实施…

2023年最新自适应主题懒人网址导航v3.9php源码

源码简介 这个懒人网址导航源码是一个基于PHPMySQL开发的网址导航系统。该版本是在原有3.8版本的基础上进行了修复和功能增强。我们建议新用户直接使用这个最新版本,放弃旧版本。如果你有二次开发的能力,可以根据更新日志自行进行升级。我们将在后期继续…

记录一次target引发的事故:一直提示数据库连接超时

你们好,我是金金金。 场景 启动项目,一直报数据库连接超时: The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. The error may exist in com/xuecheng/sy…

稚晖君智元机器人远程机器人系列发布:引领具身智能新高度

在最近的发布会上,前华为“天才少年”稚晖君及其团队亮相了他们的最新作品——智元机器人的第二代远程机器人系列。这次发布会不仅展示了丰富的产品线,还揭示了其未来的发展路线以及开源计划。本文将详细解析本次发布会的亮点和技术背后的创新。 一、发…

Kafka事件(消息、数据、日志)的存储

1、查看有关kafka日志配置文件的信息 2、查看kafka全部主题的日志文件 3、查看每个主题的日志文件 4、__consumer_offsets-xx文件夹的作用 package com.power;public class Test {public static void main(String[] args) {int partition Math.abs("myTopic".hashCo…

秋招TCP篇(较全的TCP网络知识,通俗理解底层逻辑)

TCP详细知识 计算机网络八股-局域网和广域网详解八股-OSI七层模型和TCP/IP五层模型八股-数据在网络之间传递的过程八股-UDP详解根据协议格式详解TCPSocket详解八股-TCP可靠性机制确认应答超时重传超时重传等待时间数据去重 八股-三次握手和四次挥手三次握手四次挥手为什么要三次…

中科服务器磁盘未断电状态被人拔插导致raid故障,安装系统找不到系统盘 修复raid再次安装系统成功

1,根据提示按del进入bios 直接回车 改成good状态保存(多块盘的话重复此操作即可,直到让盘的状态显示good或者online) 然后回到上级导入raid信息 raid信息导入 设置成yes,然后保存退出 然后他会自己同步数据&…

Linux 软件编程多路复用tcp

1.select的缺点: 1.select监听的文件描述符集合是一个数组,有上限(1024个) 2.select监听的文件描述符集合在应用层,内核层监听事件后需要传递给用户层带来资源开销 3.select需要用户手动查找产生事件的文件…

【Linux】分析一段oom及oops报错日志

oom相关日志分析: Oom-killer错误是因系统内存分配不足,为保障系统正常运行会随机kill掉占用较多的内存进程。 该日志已经输出内存占满相关提示,内存上限为16G,当前已使用16G,内存限制导致分配失败次数为586755次。 OOPS相关日志…

交换排序(冒泡排序和快速排序)

一、基本思想 所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置。 交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。 二、冒泡排序 1.核心思想 两两相邻的元素进行比…

6G网络的关键技术、应用前景与挑战并存的科技征途

移动通信技术正以前所未有的速度迭代更新,而6G技术的研发与商用化进程渐渐成为了当前科技领域的热点与焦点。在5G技术尚未完全普及的今天,全球各国已纷纷将目光投向了更加充满想象的6G网络时代。本文将探讨全球6G研发的最新进展,特别是欧盟与…

Linux进程间通信——互斥锁与信号量详解

文章目录 互斥锁信号量整形信号量记录形信号量利用信号量实现进程互斥利用信号量实现同步利用信号量实现前驱关系 互斥锁 现实中的锁有两种状态,打开和关闭,分别对应这资源可以被使用,和不可以被使用,我们可以通过使用钥匙对锁的…

<数据集>考场行为识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:2192张 标注数量(xml文件个数):2192 标注数量(txt文件个数):2192 标注类别数:2 标注类别名称:[cheating, good] 序号类别名称图片数框数1cheating128214412good1067…

在多云生态下,如何实现跨云的自动化身份管理?

在多云环境下实现跨云的自动化身份管理是一个重要的课题,因为这可以帮助企业确保用户和应用程序能够在不同云服务提供商之间无缝地访问资源,同时保持高度的安全性和合规性。以下是一些关键技术和实践方法,用于实现跨云环境下的自动化身份管理…

Linux驱动开发基础(中断)

所学来自百问网 目录 1. 嵌入式中断系统 2. 中断处理流程 3. 异常向量表 4. Linux系统对中断的处理 4.1 ARM 处理器程序运行的过程 4.2 保护现场 5. Linux 系统对中断处理的演进 5.1 硬件中断和软件中断 5.2 中断拆分(上半部和下半部) 5.2.1 tasklet 5.2.2 工作队列…

git笔记:git常用命令备忘录

1、工作区域和文件状态 1.1、工作区域 git的数据管理分为四个区域: 工作区(Working Directory) 本地工作目录,是我们电脑上的目录,是我们实际编写代码的区域,修改完工作区的文件后可以使用git add命令将…

72 华为资源库

1 报文格式 https://info.support.huawei.com/info-finder/tool/zh/enterprise/packetformat 2 华为IP网络电子书 资源可以下载 https://e.huawei.com/cn/topic/enterprise-network/ip-ebook 3 华为产品文档 https://support.huawei.com/enterprise/zh/doc/index.html 4 华为…