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

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


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


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

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的地址赋值给变量pFunpFun = 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.rhkb.cn/news/268939.html

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

相关文章

算法:动态规划

文章目录 引子&#xff1a;凑零钱一、斐波那契数列模型引例&#xff1a;第 N 个泰波那契数动态规划步骤空间优化 例题1 三步问题例题2&#xff1a;使用最小花费爬楼梯★例题3&#xff1a;解码方法 ★ 二、路径问题例题4&#xff1a;不同路径例题5&#xff1a;下降路径最小和例题…

[Android View] 可绘制形状 (Shape Xml)

一切以官方文档为主 官方文档https://developer.android.com/guide/topics/resources/drawable-resource?hlzh-cn#Shape 什么是可绘制形状 可以理解为用xml文件来描述一个简单的Drawable图形&#xff0c;比如说以下这段xml就可以用来描述一个白色的圆形&#xff1a; <?…

机器视觉——硬件选型

1、相机选型 在选择机器视觉相机时&#xff0c;通常需要考虑以下几个方面&#xff1a; 1、分辨率&#xff1a;相机的分辨率决定了其拍摄图像的清晰度和细节程度。根据具体的应用需求&#xff0c;可以选择适当的分辨率范围。 2、帧率&#xff1a;帧率表示相机每秒钟能够拍摄的…

[linux][xdp] xdp 入门

xdp 全称 eXpress Data Path&#xff0c;是 linux ebpf 中的一个功能。ebpf 在内核中预留了一些插入点&#xff0c;用户可以在这些插入点插入自己的处理逻辑&#xff0c;当数据路过插入点时可以做一些预期的处理&#xff0c;具体实现方式如下&#xff1a; ① 用户编写数据处理…

论文阅读_代码生成模型_CodeGeeX

英文名称: CodeGeeX: A Pre-Trained Model for Code Generation with Multilingual Evaluations on HumanEval-X 中文名称: CodeGeeX&#xff1a;一种用于代码生成的预训练模型&#xff0c;并在HumanEval-X上进行多语言评估 链接: https://arxiv.org/abs/2303.17568 代码: http…

【Java开发】Java实现调用微信机器人,发送企业微信通知

请直接看原文: 【Java开发】Java实现调用微信机器人&#xff0c;发送企业微信通知_java 企业微信推送机器人消息-CSDN博客 ------------------------------------------------------------------------------------------------------------------------------- 企业微信机器…

代码随想录day11(1)字符串:反转字符串中的单词 (leetcode151)

题目要求&#xff1a;给定一个字符串&#xff0c;将其中单词顺序反转&#xff0c;且每个单词之间有且仅有一个空格。 思路&#xff1a;因为本题没有限制空间复杂度&#xff0c;所以首先想到的是用split直接分割单词&#xff0c;然后将单词倒叙相加。 但如果想让空间复杂度为O…

算法day03_ 59.螺旋矩阵II

推荐阅读 算法day01_ 27. 移除元素、977.有序数组的平方 算法day02_209.长度最小的子数组 目录 推荐阅读59.螺旋矩阵 II题目思路解法 59.螺旋矩阵 II 题目 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形…

基于 Amazon EKS 的 Stable Diffusion ComfyUI 部署方案

01 背景介绍 Stable Diffusion 作为当下最流行的开源 AI 图像生成模型在游戏行业有着广泛的应用实践&#xff0c;无论是 ToC 面向玩家的游戏社区场景&#xff0c;还是 ToB 面向游戏工作室的美术制作场景&#xff0c;都可以发挥很大的价值&#xff0c;如何更好地使用 Stable Dif…

每日一题 — 盛水最多的容器

11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 因为体积是长度乘高&#xff0c;所以运用双指针&#xff0c;一个在最左&#xff0c;一个在最右&#xff0c;每次都记录体积 V &#xff0c;然后比较左边的长度和右边的长度&#xff0c;左边的长度…

http和https的区别是什么?

–前言 传输信息安全性不同、连接方式不同、端口不同、证书申请方式不同 一、传输信息安全性不同 1、http协议&#xff1a;是超文本传输协议&#xff0c;信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文&#xff0c;就可以直接读懂其中的信息。 2、h…

红队基础设施建设

文章目录 一、ATT&CK二、T1583 获取基础架构2.1 匿名网络2.2 专用设备2.3 渗透测试虚拟机 三、T1588.002 C23.1 开源/商用 C23.1.1 C2 调研SliverSliver 对比 CS 3.1.2 CS Beacon流量分析流量规避免杀上线 3.1.3 C2 魔改3.1.4 C2 隐匿3.1.5 C2 准入应用场景安装配置说明工具…

#WEB前端(CCS常用属性,补充span、div)

1.实验&#xff1a; 复合元素、行内元素、块内元素、行内块元素 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; span为行内元素&#xff1a;不可设置宽高&#xff0c;实际占用控件决定分布空间。 div为块内元素&#xff1a;占满整行&#xff0c;可以设置宽高 img为行内块元…

Vue-03

Vue指令 v-bind 作用&#xff1a;动态设置html的标签属性&#xff08;src url title…&#xff09; 语法&#xff1a;v-bind:属性名"表达式" 举例代码如下&#xff1a; 实现效果如下&#xff1a; 案例&#xff1a;图片切换 实现代码如下&#xff1a; 实现的效果…

[RAM] DDR5 自带双通道

主页&#xff1a; 元存储博客 文章目录 前言1. 为什么DDR5要在一个dimm里面设计两个channel&#xff1f;2. 前言 DDR5 是第 5 代双倍数据速率同步动态随机存取内存&#xff0c;又称 DDR5 SDRAM。DDR5 是在 2017 年由行业标准机构 JEDEC推动的&#xff0c;DDR5 产品 问世于 202…

LSA头部结构简述

LSA&#xff08;Link State Advertisement&#xff09;是一种用于路由协议头部结构&#xff0c;用于在网络中传递路由信息。 LSA头部结构包含以下几个字段&#xff1a; 1、LSA类型&#xff08;LSA Type&#xff09;&#xff1a;指示LSA的类型&#xff0c;不同类型的LSA用于传递…

python二级常见题目

一.常见语法 jieba—第三方中文分词函数库 jieba—第三方中文分词函数库_jieba库函数-CSDN博客 Python基础——format格式化 Python基础——format格式化_python format-CSDN博客 format()方法的使用超全_format方法-CSDN博客 Python中random函数用法整理 Python中random…

换个角度看境外支付系统:警惕金融风险之安全测试实践

【面试突击班】1. 性能测试主要关注哪些指标&#xff1f; &#xff0c;这个名词相信生活在当下社会的大家应该都不在陌生了吧&#xff0c;他时时刻刻充斥在我们的日常生活中&#xff0c;哪里有交易发生&#xff0c;哪里就有它的身影。 其实直白的来说&#xff0c;支付系统是扮…

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

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

ES系列之Logstash实战入门

概述 作为ELK技术栈一员&#xff0c;Logstash用于将数据采集到ES&#xff0c;通过简单配置就能把各种外部数据采集到索引中进行保存&#xff0c;可提高数据采集的效率。 原理 数据源提供的数据进入Logstash的管道后需要经过3个阶段&#xff1a; input&#xff1a;负责抽取数…