cola_os学习笔记(下)

cola_os学习笔记(上)

os文件夹

cola_device.c

​ .h放在.c的同层级。作者采用了字符设备注册的方式,在.h中可以看到设备属性。也就是把LED这些设备抽象,外面传入"LED1"这样的参数,使我联想到java的new一个对象。

在这里插入图片描述

​ 值得注意的是58行,可以得出整体采用的是单链表的结论,而且是从下往上的,从IO到应用层。同时,链表的特性就可以套到这上边来。

由于本人不希望项目作者的成果因为我而被爬取或者是供某些AI公司使用,涉及到项目代码的部分我都会截图。

​ 对设备进行的操作显然是供上层使用,因此放在.h里面供外部调用。
在这里插入图片描述

​ 这些函数调用到的而外部不直接调用的函数,声明为静态函数。比如cola_device_register就调用到了device_list_inster,来进行链表的新增节点操作。

.h里面的枚举写法,我们查询菜鸟教程可以得知C enum(枚举) | 菜鸟教程 (runoob.com):

在这里插入图片描述

枚举不赋值的语法:手动为GUI Guider生成代码增加控件替换图片。声明一个该类型的变量,然后判断他是不是这个集合里面的内容。

作者给出的驱动使用用例:

在这里插入图片描述

find是基于对设备name的比较判断实现的,assert用于DEBUG,设备write的入口参数为设备、起始、字符串、长度。

作者使用了结构体函数指针的方式,支持了各种设备可以在这个文件的基础上”继承“方法。在stm32_usart.c的第139行,我们可以看到:声明为cola_device_ops之后,该结构体变量就能引出下面的那些读写用法

在这里插入图片描述

​ 我们只要在该文件中实现uart1_write等函数即可。入口参数用的是cola_device.h第48行的config。不得不说真是十分巧妙。

​ 作者例程使用config中似乎没有使用到var参数,可能在其他一些情况用到。我由此联想到可能存在一种情况,即上层需求和底层接口不符的情况,一个device不能囊括所有的设备应用需求。师兄项目工程的写法类似,但是他对设备进行了区别,比如led_device。不过适合的才是最好的,具体问题具体分析。

cola_os.c

main.c相当的简洁。硬件初始化->硬件驱动初始化->软件应用初始化->while(1),无论是哪一个初始化,中间都是有应用层再到设备IO。

while(1)主循环中放了一个loop,写法有点类似LVGL。loop依赖cola_os.c运行,循环遍历任务链表。我们需要做的就是一开始把它注册到链表里面,由while(1)去轮询定时器是否达到任务的执行时间。

任务的创建和定时器的创建可以参考作者文档。

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

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

相关文章

编译错误cc:not found总结

一、错误 cc: not found 系统无法找到名为cc的编译器。 注:在大多数Linux系统中,cc通常是C编译器的链接(link)或别名,它通常指向gcc(GNU Compiler Collection)或其他C编译器。 二、可能导致…

「OC」CAlayer——巧用动画实现一个丝滑的折叠cell

「OC」CAlayer——巧用动画实现一个丝滑的折叠cell 前言 在这个暑假集训后的时间,都在家里做着学习笔记的整理,深入学习了CALayer的相关知识,掌握了第三方库Masonry自动布局的用法,以及学习了MVC的相关内容,正好组内…

chapter08-面向对象编程——(Object类详解)——day09

目录 319-运算符 320-查看Jdk源码 321-子类重写equals 322-equals课堂练习1 323-equals重写练习2 324-equals重写练习3 325-hashCode 326-toString 327-finalize 319-运算符 引用的都是同一个地址,所以返回true 320-查看Jdk源码 equals只能判断引用类型是…

艾体宝干货丨Redis与MongoDB的区别

Redis(Remote Dictionary Server,远程字典服务器)和 MongoDB 是两类知名的 NoSQL数据库,其以非结构化的方式存储数据。与传统关系数据库使用表格、行和列来组织数据不同,NoSQL数据库采用了不同的数据存储模型。Redis是…

探索极速Python:Sanic框架的魔力

文章目录 探索极速Python:Sanic框架的魔力背景:为什么选择Sanic?Sanic是什么?如何安装Sanic?简单的库函数使用方法场景应用示例常见Bug及解决方案总结 探索极速Python:Sanic框架的魔力 背景:为什…

【位置编码】【Positional Encoding】直观理解位置编码!把位置编码想象成秒针!

【位置编码】【Positional Encoding】直观理解位置编码!把位置编码想象成秒针! 你们有没有好奇过为啥位置编码非得长成这样: P E ( p o s , 2 i ) s i n ( p o s 1000 0 2 i / d m o d e l ) P E ( p o s , 2 i 1 ) c o s ( p o s 1000 …

AcWing895. 最长上升子序列

这个代码不知道怎么说&#xff0c;反正就是对着代码手算一次就懂了&#xff0c;无需多言&#xff0c;就是俩for循环里面的第二层for的循环条件是j<i,j是从下标1往下标i-1遍历的&#xff0c;每次a【j】<a【i】就在答案数组f【i】上面做出更新。基本的输入样例已经可以覆盖…

红黑树刨析(删除部分)

文章目录 红黑树删除节点情景分析情景1&#xff1a;删除节点左右子树都为空情景1.1&#xff1a;删除节点为红色情景1.2&#xff1a;删除节点为黑色情况1.2.1&#xff1a;删除节点的兄弟节点是红色情景1.2.2&#xff1a;删除节点的兄弟节点是黑色情景1.2.2.1&#xff1a;删除节点…

Cpp学习手册-基础学习

首先你要去网上下载对应的运行软件&#xff0c;先把对应的 C 环境配置好&#xff0c;配置好了我们就可以开始我们的C 学习之旅了。希望通过学习我们能够成为一个比较不错的 C 开发工程师。我也会持续更新 C 知识。 1. C语法基础 当我通过 CLion 工具创建了一个新的 Project 。…

Redis中的 大/热 key问题 ,如何解决(面试版)

big key 什么是 big key? big key&#xff1a;就是指一个内存空间占用比较大的键(Key) 造成的问题&#xff1a; 内存分布不均。在集群模式下&#xff0c;不同 slot分配到不同实例中&#xff0c;如果大 key 都映射到一个实例&#xff0c;则分布不均&#xff0c;查询效率也…

自建电商网站整合Refersion教程

前言&#xff1a;   先介绍一下Refersion有啥用&#xff0c;如果你有一个自己的跨境电商独立站点&#xff0c;想找一些网红帮忙推广销售自己的商品&#xff0c;然后按照转化订单比例给网红支付佣金&#xff0c;这件事情对双方来说透明性和实时性很重要&#xff0c;Refersion就…

C++ | Leetcode C++题解之第382题链表随机节点

题目&#xff1a; 题解&#xff1a; class Solution {ListNode *head;public:Solution(ListNode *head) {this->head head;}int getRandom() {int i 1, ans 0;for (auto node head; node; node node->next) {if (rand() % i 0) { // 1/i 的概率选中&#xff08;替…

Unity URPShader支持多光源处理

//声明变体并且引用文件 #pragma shader_feature _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" //在数据结构体中声明需要使用的数据 struct Attributes {float4 posit…

五种多目标优化算法(NSGA3、MOPSO、MOGWO、NGSA2、SPEA2)性能对比,包含47个多目标测试函数,6种评价指标,MATLAB代码

一、五种多目标算法及六种评价指标简介 多目标灰狼优化算法&#xff08;MOGWO&#xff09;&#xff1a; MOGWO是由Mirjalili等人在2016年提出的&#xff0c;基于灰狼优化算法&#xff08;GWO&#xff09;的多目标版本。它引入了存档机制和改进的头狼选择方式&#xff0c;以处理…

2024-08-30作业

作业2 代码 #include <iostream>using namespace std;class Per { private: string name; int age; double* height; double* weight; public: //有参构造函数 Per(string name,int age,int height,int weight):name(name),age(age),height(new double(height)),weigh…

基于STM32开发的智能家居温度控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化温度监测与显示风扇/加热器控制Wi-Fi通信与远程监控应用场景 家庭环境的智能温度管理办公楼的节能温控系统常见问题及解决方案 常见问题解决方案结论 1. 引言 随着人们对生活质量…

Flask+LayUI开发手记(六):树型表格的增删改查

树型表格的增删改查功能与数据表格的是完全一致&#xff0c;就是调用layui-form表单组件实现数据输入再提交&#xff0c;比较大的区别是树型节点的编辑&#xff0c;都需要有上级节点的输入&#xff0c;而这个上级节点的展示&#xff0c;必须是以树型方式展示出来。当然&#xf…

使用facebook开源prophet模型预测上证指数etf股价

可以图个乐&#xff0c;没有那么准确&#xff0c;可能还需要更深入的研究分析 蓝线是预测的2024年的走势&#xff0c;绿线是实际走势&#xff0c;红线是历史和未来的分界线。结果上有蛮多差异的。 # 测试预测2024年 coded by luke 伊玛目的门徒 import akshare as ak impor…

信息学奥赛一本通/openjudge Crossing River

题目 一本通题目入口 openjudge题目入口 &#xff08;注&#xff1a;由于一本通题面描述的可能有些欠缺&#xff0c;所以这里的题面采用openjudge英文翻译后的题面&#xff09; 题目分析 首先我们来看样例&#xff0c;为什么样例的结果是17呢?首先观察&#xff0c;“5”和“…

GUI编程04:课堂练习及总结

本节内容视频链接&#xff1a;6、课堂练习讲解及总结_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1DJ411B75F?p6&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 根据前三节学习到的Frame、Panel、Button知识&#xff0c;画出一下窗口界面&#xff1a; 实现代码如下…