(学习日记)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.mzph.cn/news/716823.shtml

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

相关文章

Kubernetes: 本地部署dashboard

本篇文章主要是介绍如何在本地部署kubernetes dashboard, 部署环境是mac m2 下载dashboard.yaml 官网release地址: kubernetes/dashboard/releases 本篇文章下载的是kubernetes-dashboard-v2.7.0的版本&#xff0c;通过wget命令下载到本地: wget https://raw.githubusercont…

【Python】进阶学习:pandas--isin()用法详解

【Python】进阶学习&#xff1a;pandas–isin()用法详解 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的订阅…

【NDK系列】Android tombstone文件分析

文件位置 data/tombstone/tombstone_xx.txt 获取tombstone文件命令&#xff1a; adb shell cp /data/tombstones ./tombstones 触发时机 NDK程序在发生崩溃时&#xff0c;它会在路径/data/tombstones/下产生导致程序crash的文件tombstone_xx&#xff0c;记录了死亡了进程的…

单细胞Seurat - 细胞聚类(3)

本系列持续更新Seurat单细胞分析教程&#xff0c;欢迎关注&#xff01; 维度确定 为了克服 scRNA-seq 数据的任何单个特征中广泛的技术噪音&#xff0c;Seurat 根据 PCA 分数对细胞进行聚类&#xff0c;每个 PC 本质上代表一个“元特征”&#xff0c;它结合了相关特征集的信息。…

mysql5*-mysql8 区别

1.Mysql5.7-Mysql8.0 sysbench https://github.com/geekgogie/mysql57_vs_8-benchmark_scripts 1.读、写、删除更新 速度 512 个线程以后才会出现如下的。 2.删除速度 2.事务处理性能 3.CPU利用率 mysql8 利用率高。 4.排序 5.7 只能ASC&#xff0c;不能降序 数据越来越大

牢记于心单独说出来的知识点(后续会加)

第一个 非十进制&#xff08;八进制&#xff0c;十六进制&#xff09;写在文件中它本身就是补码&#xff0c;计算机是不用进行内存转换&#xff0c;它直接存入内存。&#xff08;因为十六进制本身是补码&#xff0c;所以计算机里面我们看到的都是十六进制去存储&#xff09; …

Qt 简约美观的加载动画 文本风格 第八季

今天和大家分享一个文本风格的加载动画, 有两类,其中一个可以设置文本内容和文本颜色,演示了两份. 共三个动画, 效果如下: 一共三个文件,可以直接编译 , 如果对您有所帮助的话 , 不要忘了点赞呢. //main.cpp #include "LoadingAnimWidget.h" #include <QApplic…

MySQL:开始深入其数据(一)DML

在上一章初识MySQL了解了如何定义数据库和数据表&#xff08;DDL&#xff09;&#xff0c;接下来我们开始开始深入其数据,对其数据进行访问&#xff08;DAL&#xff09;、查询DQL&#xff08;&#xff09;和操作(DML)等。 通过DML语句操作管理数据库数据 DML (数据操作语言) …

计算机网络之传输层 + 应用层

.1 UDP与TCP IP中的检验和只检验IP数据报的首部, 但UDP的检验和检验 伪首部 首部 数据TCP的交互单位是数据块, 但仍说TCP是面向字节流的, 因为TCP仅把应用层传下来的数据看成无结构的字节流, 根据当时的网络环境组装成大小不一的报文段.10秒内有1秒用于发送端发送数据, 信道…

【Python】进阶学习:pandas--groupby()用法详解

&#x1f4ca;【Python】进阶学习&#xff1a;pandas–groupby()用法详解 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448;…

Python算法100例-3.5 亲密数

1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序6.问题拓展 1&#xff0e;问题描述 如果整数A的全部因子&#xff08;包括1&#xff0c;不包括A本身&#xff09;之和等于B&#xff0c;且整数B的全部因子&#xff08;包括1&#xff0c;不包括B本身&#xff09;之和…

中国电子学会2020年6月份青少年软件编程Sc ratch图形化等级考试试卷四级真题。

第 1 题 【 单选题 】 1.执行下面程序&#xff0c;输入4和7后&#xff0c;角色说出的内容是&#xff1f; A&#xff1a;4&#xff0c;7 B&#xff1a;7&#xff0c;7 C&#xff1a;7&#xff0c;4 D&#xff1a;4&#xff0c;4 2.执行下面程序&#xff0c;输出是&#xff…

CVE-2016-5195 复现记录

文章目录 poc前置知识页表与缺页异常/proc/self/mem的写入流程madvise 漏洞点修复 Dirty COW脏牛漏洞是一个非常有名的Linux竞争条件漏洞&#xff0c;虽然早在2016年就已经被修复&#xff0c;但它依然影响着众多古老版本的Linux发行版&#xff0c;如果需要了解Linux的COW&#…

Redis7 实现持久化的三种方式

1、概述 1.1、Redis持久化的重要性 数据恢复&#xff1a;Redis是一个内存数据库&#xff0c;如果系统或服务宕机&#xff0c;内存中的数据将会丢失。Redis的持久化机制可以把数据保存到磁盘上&#xff0c;以便在系统重启后恢复数据。这是Redis持久化最基本也是最重要的功能。…

JCL中IEFBR14和COND

JCL中IEFBR14和COND ​ COND CODE&#xff0c;就是反映JCL中STEP运行状态的参数&#xff0c;JCL正常终了的COND CODE 是0000&#xff0c;另外笔者在执行某些工具JCL时候&#xff0c;比方说简单一个COMPARE吧&#xff0c;可能会出现0012、0004或者0016&#xff0c;0001&#xf…

数据结构:栈和队列的实现附上源代码(C语言版)

目录 前言 1.栈 1.1 栈的概念及结构 1.2 栈的底层数据结构选择 1.2 数据结构设计代码&#xff08;栈的实现&#xff09; 1.3 接口函数实现代码 &#xff08;1&#xff09;初始化栈 &#xff08;2&#xff09;销毁栈 &#xff08;3&#xff09;压栈 &#xff08;4&…

金三银四求职攻略:如何在面试中脱颖而出

随着春天的脚步渐近&#xff0c;对于众多程序员来说&#xff0c;一年中最繁忙、最重要的时期也随之而来。金三银四&#xff0c;即三月和四月&#xff0c;被广大程序员视为求职的黄金时段。在这段时间里&#xff0c;各大公司纷纷开放招聘&#xff0c;求职者们则通过一场又一场的…

初阶数据结构之---栈和队列(C语言)

引言 在顺序表和链表那篇博客中提到过&#xff0c;栈和队列也属于线性表 线性表&#xff1a; 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构。线性表在逻辑上是线性结构&#xff0c;也就是说是连…

xxl-job--02--可视化界面各功能详细介绍

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 可视化界面1 新增执行器2.新增任务**执行器**&#xff1a;**任务描述**&#xff1a;**路由策略**&#xff1a;**Cron**&#xff1a;cron表达式**运行模式**JobHandl…

java Springboot vue 健身房系统,简单练手项目

该项目主要分为管理员和会员模块 管理员具有&#xff1a;会员管理&#xff0c;器材管理,员工管理&#xff0c;健身课程管理 会员模块&#xff0c;可以在线报名健身课程&#xff0c;查看自己课程 采用VUE前端开发和springboot后端开发&#xff0c;极简代码编写&#xff0c;没…