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选择安…

开启创意编程新篇章:Scratch的持续创新与功能拓展

开启创意编程新篇章:Scratch的持续创新与功能拓展 Scratch,这款广受全球儿童和教育工作者喜爱的编程工具,从未停止过创新的步伐。随着技术的发展和用户需求的增长,Scratch团队一直在不断地为其添加新的编程特性和功能。本文将综合…

【Android】如何使用adb抓取Android系统的WiFi日志

🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:WLAN技术📰如觉得博主文章写的不错或对你有所帮助的话,还望大家三连支持一下呀!!! 👉关注✨、点赞👍、收藏�…

计算机视觉编程 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…

groovy闭包语法详解(二)

文章目录 线程中的闭包调用自定义闭包重写doCall查找并调用闭包成员闭包中的形参扩展闭包的实参控制 线程中的闭包调用 package com.juan.groovyclass MyThread extends Thread {// 闭包成员变量Closure closureMyThread(Closure c) {this.closure c// 启动线程,运…

数据结构基础.顺序表与链表

数据结构: 1.衡量一个程序是否优秀: 1.时间复杂度: 数据量增长与程序运行时间的比例关系以函数描述称为时间渐进复杂度函数,简称时间复杂度 O(c) > O(logn) > O(n) > O(nlogn) > O(n^2) > O(n^3) > O…

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版本的基础上进行了修复和功能增强。我们建议新用户直接使用这个最新版本,放弃旧版本。如果你有二次开发的能力,可以根据更新日志自行进行升级。我们将在后期继续…

oracle和mysql查询某字段在哪个表中

oracle和mysql查询某字段在哪个表中 oracle的 select TABLE_NAME from user_tab_columns where COLUMN_NAME字段名mysql的: select table_schema ,table_name from information_schema.columns where column_name ‘字段名’ 查询结果table_schema为数据库名&a…

记录一次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…

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

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

unittest 和 pytest 的区别

一、用例编写规则 1.unittest 提供了 test cases、test suites、test fixtures、test runner 相关的类,让测试更加明确、方便、可控。使用 unittest 编写用例,必须遵守以下规则: (1)测试文件必须先 import unittest (2)测试类必须…

js去重的方法

js去重的方法 for循环indexOf const result [] for(let i0;i<arr.length;i){if(result.indexOf(arr[i]-1)){result.push(arr[i])} }filter indexOf arr.filter((item,index,arr) > arr.indexOf(item)-1)用set数据结构&#xff08;set会把数组变成一系列无序的、没有…

实现android清单文件里某个权限动态配置

举例&#xff1a;<uses-permission android:name"android.permission.MANAGE_EXTERNAL_STORAGE" /> 需求&#xff1a;debug有这个权限&#xff0c;release没有这个权限 一. 第一种是第三方库没有引入MANAGE_EXTERNAL_STORAGE权限&#xff0c;实现如下 app的An…

百度最新旗舰大模型文心4.0 Turbo精调服务上线

8月21日&#xff0c;百度智能云宣布&#xff0c;推出文心旗舰大模型ERNIE 4.0 Turbo精调服务&#xff0c;帮助企业利用自身业务数据&#xff0c;训练出更适合企业应用场景的大模型&#xff0c;极大提升模型在业务中的使用效果&#xff0c;即日起企业用户可登录百度智能云官网进…

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可靠性机制确认应答超时重传超时重传等待时间数据去重 八股-三次握手和四次挥手三次握手四次挥手为什么要三次…

大一新生如何学好计算机

目录 计算机有哪些工作种类他们的区别如何克服编程学习中的挫折感的&#xff1f; 计算机有哪些工作种类 软件工程 软件开发、软件测试、软件项目管理、软件架构师、软件质量保证工程师等。 计算机科学与技术 计算机研发工程师、算法工程师、数据科学家、人工智能工程师、机器学…

配置PXE预启动执行环境:使用PXE装机服务器网络引导装机

文章目录 PXE概述PXE批量部署的优点基本的部署过程搭建的前提条件 搭建配置PXE装机服务器1. 准备 CentOS 7 安装源&#xff08;YUM 仓库&#xff09;2. 安装并启用 TFTP 服务3. 安装并启用 DHCP 服务4. 准备 Linux 内核和初始化镜像文件5. 准备 PXE 引导程序6. 安装 FTP 服务并…