(学习日记)2024.03.01:UCOSIII第三节 + 函数指针 (持续更新文件结构)

news2024/11/15 21:58:09

写在前面:
由于时间的不足与学习的碎片化,写博客变得有些奢侈。
但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。
既然如此
不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几句话指明本质,以便于日后搜索起来更加容易。


标题的结构如下:“类型”:“知识点”——“简短的解释”
部分内容由于保密协议无法上传。


点击此处进入学习日记的总目录

2024.03.01

  • 七、UCOSIII:文件结构与解释
  • 八、UCOSIII:函数指针
    • 函数指针的形式
      • 1. 形式1:返回类型(*函数名)(参数表)
      • 2. 形式2:typedef 返回类型(*新类型)(参数表)

七、UCOSIII:文件结构与解释

由于后面会用到各种宏与函数,为了给它们分类,我提前把UCOSIII系统各文件的功能整理出来,后面遇到各种文件就知道什么功能了。
在这里插入图片描述

父文件目录子文件目录孙文件目录文件名功能
UseruCOS-IIISourceos.h包含主要的μC/ OS-III头文件,该文件声明常量,宏,μC/ OS-III全局变量(仅供μC/ OS-III使用),函数原型等。
--Sourceos_type.h包含μC/ OS-III数据类型的声明,端口设计人员可以更改这些声明以更好地利用CPU体系结构。
与OS相关的数据类型则在os_type.h定义。
在这种情况下,通常会将文件复制到端口目录,然后进行修改。
--Sourceos_var.c包含μC/ OS-III全局变量。 这些变量供μC/ OS-III管理,不应由应用程序代码访问。
--Sourceos_task.c包含用于使用OSTaskCreate(),OSTaskDel(),OSTaskChangePrio()等管理任务的代码。
与任务的操作密切相关,包括任务的建立、删除、挂起、恢复等等。
--Sourceos_time.cuC/OS-II中最小时钟单位是timetick(时钟节拍),其中包含时间延迟、时钟设置及时钟恢复等与时钟相关的函数。
--Sourceos_cfg.h定义优先级数量
--Sourceos_cfg_app.c根据os_cfg_app.h中的值声明变量和数组。
--Sourceos_core.c操作系统的处理核心。包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。能够维持系统基本工作的部分都在这里
--Sourceos_dbg.c包含由内核感知的调试器或μC/ Probe使用的常量变量的声明。
--Sourceos_flag.c包含事件标志管理的代码。
--Sourceos_int.c包含用于中断处理程序任务的代码,当OS_CFG_ISR_POST_DEFERRED_EN(请参见os_cfg.h)设置为1时使用。
--Sourceos_mem.c包含μC/ OS-III固定大小内存管理器的代码。
--Sourceos_msg.c包含处理消息的代码。μC/OS-III提供消息队列和任务特定的消息队列。
--Sourceos_mutex.c包含用于管理互斥信号量的代码。
--Sourceos_pend_multi.c包含允许代码插入多个信号量或消息队列的代码。
--Sourceos_prio.c包含用于管理位图表的代码,用于跟踪准备就绪的任务。如果使用的CPU提供了位设置,清除和测试指令以及计数前导零指令,则可以用等效于汇编语言的该文件代替该汇编语言以提高性能。
--Sourceos_q.c管理信号量。
--Sourceos_sem.c包含用于管理用于资源管理和/或同步的信号量的代码。
--Sourceos_stat.c包含用于统计任务的代码,该代码用于计算全局CPU使用率和每个任务的CPU使用率。
--Sourceos_tick.c包含用于管理已延迟自身的任务或因超时而在内核对象上暂挂的任务的代码。
--Sourceos_tmr.c包含用于管理软件计时器的代码。
UseruCOS-IIIPortsos_cpu.h进行数据类型定义,处理器相关代码和几个函数原型。
--Portsos_cpu_c.c定义一些用户 hook 函数。
--Portsos_cpu_a.asm移植需要用汇编代码完成的函数,主要就是任务切换函数。
--Portsos_dbg.c内核调试相关数据和函数,可以不改
UseruC-CPUcpu.h凡是与CPU类型相关的数据类型则统一在cpu.h中定义,包含用于使μC/OS-III和其他模块独立于CPU和编译器字长的类型定义。
具体来说,将找到CPU_INT16U,CPU_INT32U,CPU_FP32和许多其他数据类型的声明。
该文件还指定CPU是大端机还是小端机,定义μC/ OS-III使用的CPU_STK数据类型,定义宏CPU_CRITICAL_ENTER()和CPU_CRITICAL_EXIT(),并包含特定于CPU体系结构的函数的函数原型等。
-uC-CPUcpu_core.c包含所有CPU体系结构通用的C代码。 具体来说,该文件包含用于测量CPU_CRITICAL_ENTER()和CPU_CRITICAL_EXIT()宏的中断禁用时间的函数,一个在CPU不提供指令的情况下模拟计数前导零指令的函数以及一些其他函数。
-uC-CPUcpu_core.h包含cpu_core.c中提供的功能的功能原型以及模块用来测量中断禁用时间的变量的分配。
-uC-CPUcpu_def.h包含μC/ CPU模块使用的其他#define常数。

八、UCOSIII:函数指针

在os.h里,对于任务函数的数据类型是这么定义的:

typedef  void  (*OS_TASK_PTR)(void *p_arg);

这就用到了一种之前不怎么常用的用法:函数指针

函数指针的形式

1. 形式1:返回类型(*函数名)(参数表)

#include <iostream>
 using namespace std;
 
//定义一个函数指针pFUN,它指向一个返回类型为char,有一个整型的参数的函数
char (*pFun)(int);
//定义一个返回类型为char,参数为int的函数
//从指针层面上理解该函数,即函数的函数名实际上是一个指针,
//该指针指向函数在内存中的首地址
char glFun(int a)
{
    cout << a;
}
 
int main()
{
//将函数glFun的地址赋值给变量pFun
    pFun = glFun;
//*pFun”显然是取pFun所指向地址的内容,当然也就是取出了函数glFun()的内容,然后给定参数为2。
    (*pFun)(2);
    return 0;
}

通过上面的一个小例子,我们知道了函数指针的用法,
而typedef可以让函数指针更直观方便

2. 形式2:typedef 返回类型(*新类型)(参数表)

typedef char (*PTRFUN)(int); 
//定义了一种PTRFUN的类型,并定义这种类型为指向某种函数的指针,这种函数以一个int为参数并返回char类型。后面就可以像使用int,char一样使用PTRFUN了。

PTRFUN pFun; 
//使用这个新类型定义了变量pFun,此时就可以像使用形式1一样使用这个变量了。

char glFun(int a){ return;} 

void main() 
{ 
    pFun = glFun; 
    //将函数指针指向定义的函数
    
    (*pFun)(2); 
    //类似于变量指针的用法(使用*),只不过需要输入实参
} 

参考资料:
typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针

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

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

相关文章

java-ssm-jsp-宠物护理预定系统

java-ssm-jsp-宠物护理预定系统 获取源码——》公主号&#xff1a;计算机专业毕设大全

勇敢尝鲜之Springboot3大坑-集成Mybatisplus报错:ddlApplicationRunner

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

【LeetCode-1143】最长公共子序列(动归)

目录 题目描述 解法1&#xff1a;动态规划 代码实现 题目链接 题目描述 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除…

python识别并控制操作已打开的浏览器进行自动化测试

前提&#xff1a;已安装python和selenium 一、将浏览器以debugger模式打开 打开方法&#xff1a; 1.右击浏览器&#xff0c;选择属性&#xff1a; 2.在目标中加上 --remote-debugging-port9222 --user-data-dir"C:\selenum\AutomationProfile" 二、识别代码 from…

java面试题(spring框架篇)(黑马 )

树形图&#xff1a; 一、Spring框架种的单例bean是线程安全吗&#xff1f; Service Scope("singleton") public class UserServiceImpl implements UserService{ } singleton:bean在每个Spring IOC容器中只有一个实例 protype&#xff1a;一个bean的定义可以有多个…

加密与安全_探索签名算法

文章目录 概述应用常用数字签名算法CodeDSA签名ECDSA签名小结 概述 在非对称加密中&#xff0c;使用私钥加密、公钥解密确实是可行的&#xff0c;而且有着特定的应用场景&#xff0c;即数字签名。 数字签名的主要目的是确保消息的完整性、真实性和不可否认性。通过使用私钥加…

从零开始手写RPC框架(3)——ZooKeeper入门

目录 ZooKeeper简介ZooKeeper中的一些概念 ZooKeeper安装与常用命令常用命令 ZooKeeper Java客户端 Curator入门 ZooKeeper简介 是什么&#xff1f; ZooKeeper 是一个开源的分布式协调服务&#xff0c;本身就是一个分布式程序&#xff08;只要半数以上节点存活&#xff0c;Zo…

Vue+SpringBoot打造海南旅游景点推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四、核心代码4.1 随机景点推荐4.2 景点评价4.3 协同推荐算法4.4 网站登录4.5 查询景点美食 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的海南旅游推荐系统&#xff…

酷开科技,让酷开系统成为现代生活的变革者

电视&#xff0c;从问世就一直受到人们的追捧。还记得小时候一家人围坐在电视机前的场景&#xff0c;小小的黑白屏幕&#xff0c;牢牢的吸引着大家的目光。随着科技的不断进步&#xff0c;我们的生活也发生了翻天覆地的变化。而电视&#xff0c;也从笨重的黑白电视变成了轻薄的…

8.WEB渗透测试-Linux基础知识-Linux基础操作(二)

内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;7.WEB渗透测试-Linux基础知识-Linux基础操作&#xff08;一&#xff09;-CSDN博客 Tab键是补全命令&#xff0c;双击两下Tab键&#xff0c;会告诉你能补全的所有命令 文本编辑器指令&#xff1a;vi 输入vi 1…

React富文本编辑器开发(六)

现在&#xff0c;相关的基础知识我们应该有个大概的了解了&#xff0c;但离我们真正的开发出一个实用型的组件还有一段距离&#xff0c;不过不用担心&#xff0c;我们离目标已经越来越近。 以现在我们所了解的内容而言&#xff0c;或许你发现了一个问题&#xff0c;就是我们的编…

用Java语言创建的Spring Boot项目中,如何传递数组呢??

问题&#xff1a; 用Java语言创建的Spring Boot项目中&#xff0c;如何传递数组呢&#xff1f;&#xff1f; 在这个思路中&#xff0c;其实&#xff0c;Java作为一个后端开发的语言&#xff0c;没必要着重于如何传入&#xff0c;我们主要做的便是对传入的数组数据进行处理即可…

力扣hot6---双指针

题目&#xff1a; TLE做法&#xff08;哈希两重for循环&#xff09; 标签虽然说是用双指针&#xff0c;但是第一个想法真就不是双指针呀。。。就感觉这道题很像&#xff1a; 力扣hot1--哈希-CSDN博客 于是就用了类似的想法&#xff1a; 首先要排个序&#xff0c;至于为什么要…

MySQL 如何从 Binlog 找出变更记录并回滚

文章目录 前言1. 案例模拟1.1 确认信息1.2 下载 Binlog1.3 准备环境1.4 注册 Binlog1.5 准备结构信息1.6 Python 订阅1.7 输出结果展示 2. 原理解析2.1 程序设计2.2 模块版本 总结 前言 最近有研发同学问我&#xff1a;有一个问题&#xff0c;想查一个 ID 为 xxxx 的 sku 什么…

Linux(CentOS为例)环境下 Git提交代码加速,使用FastGithub,运行报错解决

当你的在服务器上使用Git进行推送时&#xff0c;时常会出现超时错误。这里使用FastGithub 首先下载FastGithub 这个软件作者不是为什么删除了GithUb的仓库&#xff0c;这个链接还有。下载Linux版本的 FastGithub Linux&#xff0c;Windows版本 下载完毕后解压 ./fastgithu…

Linux课程四课---Linux开发环境的使用(gcc/g++编译器的相关)

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

[VSCode插件] 轻量级静态博客 - MDBlog

MDBlog VSCode插件&#xff0c;基于Markdown的轻量级静态博客系统&#xff0c;同时支持导出为可以部署的静态博客。 仓库 MDBlog 1. Features 博客基础功能&#xff1a;分类管理、文章管理、自动生成索引快捷指令&#xff1a;快捷输入表格、mermaid、wavedrom、代码块发布&a…

Photoshop 2023:重塑创意,引领数字艺术新纪元

在数字艺术的浩瀚星空中&#xff0c;Adobe Photoshop 2023&#xff08;简称PS 2023&#xff09;如同一颗璀璨的新星&#xff0c;为Mac和Windows用户带来了前所未有的创意体验。这款强大的图像处理软件不仅继承了前作的精髓&#xff0c;更在细节上进行了诸多创新&#xff0c;让每…

前端el-date-picker传递的日期格式不是自己想要的格式

解决方法&#xff1a; 添加format和value-format属性进行解决。 format“YYYY-MM-DD” value-format“YYYY-MM-DD” 注意&#xff1a;日期格式要用大写&#xff01;&#xff01;&#xff01;&#xff01;用小写会出现错误&#xff0c;不能回填选择的日期&#xff0c;会直接传入…

【 buuctf-swp】

wget 是什么东西呢&#xff1f; 那就直接过滤 http 流&#xff0c;并全部导出&#xff0c;点击 save all在导出来的一大堆里发现个 zip&#xff0c;需要输入密码&#xff0c;macOS 一大特点就是&#xff0c;如果是伪加密&#xff0c;随便输入一个密码就可以解压缩&#xff0c;…