RM电控工程讲义
HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) 是一个回调函数,通常在STM32的HAL库中用于处理CAN(Controller Area Network)接收FIFO 0中的消息。当CAN接口在FIFO 0中有待处理的消息时,这个函数会被调用。
HAL库CAN回调函数:
hcan->Instance 是一个指向CAN硬件实例的指针。当你创建并配置一个CAN句柄(CAN_HandleTypeDef)时,你会为特定的CAN硬件实例(如CAN1、CAN2等)提供这个指针。
一个CAN发送函数:
电机数据的监测:
这里的7并不代表结构体中的8个电机数据,而是代表8个电机,注意一个CAN中最多有8个电机;
所以会有这种不同序列号的电机返回电机数据,返回的是整个结构体中的8个数据:
两者的区别:
枚举:
结构体(struct)和枚举(enum)有着明显的区别:
结构体(struct)用于将不同类型的数据组合成一个单一的复合数据类型。它允许你创建一个包含多个不同类型成员的数据结构,这些成员可以是不同的数据类型,如整数、浮点数、字符数组等。结构体通常用于表示复杂的数据对象,如学生记录、员工信息等。
枚举(enum)用于定义一组命名的整数值。它允许你为整数值赋予有意义的名称,使代码更易于理解和维护。枚举通常用于表示一组固定的选项或状态,如颜色、方向、状态代码等。
结构体的成员可以是任意类型,包括基本数据类型(如int、float、char等)、复合数据类型(如数组、结构体、联合等)以及其他用户定义的类型。
枚举的成员只能是整数值,虽然你可以显式地为每个成员赋值,但底层类型始终是整数。
定义一个结构体:
typedef struct {
...........
} motor_measure_t;
在C语言中,extern关键字用于声明一个变量或函数,而不是定义它。当你需要在一个源文件中访问另一个源文件中定义的变量或函数时,你会使用extern。extern告诉编译器,变量或函数的定义在别的文件中,而不是在当前文件中。
跨文件共享变量:
当你有一个变量需要在多个源文件中共享时,你通常会在一个源文件中定义这个变量(通常在一个头文件中,并通过#include包含在其他源文件中),并在其他源文件中使用extern关键字来声明它。
// file1.c
int sharedVariable = 42;
// file2.c
extern int sharedVariable;
int main() {
printf("%d\n", sharedVariable); // 输出 42
return 0;
}
函数声明:
当你想在一个源文件中调用另一个源文件中定义的函数时,你需要在调用它的源文件中使用extern来声明这个函数。
c
// file1.c
void myFunction() {
printf("This is my function.\n"); }
// file2.c
extern void myFunction();
int main() {
myFunction(); // 输出 "This is my function."
return 0;
}
头文件中的声明:
通常,当你需要在一个头文件中声明一个变量或函数,以供多个源文件使用时,你会使用extern。这样做可以确保每个包含该头文件的源文件都能知道这个变量或函数的存在,而不需要在每个源文件中都进行定义。
避免重复定义:
如果你尝试在多个源文件中定义同一个变量或函数,链接器会报错,因为每个定义都会创建一个新的实例。通过使用extern,你可以确保变量或函数只在一个地方定义,而在所有需要它的地方进行声明。
头文件中声明其他文件中无需重新extern;
static uint8_t can_send_data[8]; 声明了一个静态的8元素数组,这个数组在整个程序的执行期间都保持其值,并且只在定义它的文件内可见。这样的数组通常用于存储需要在程序的多个函数调用之间保持其值的数据,或者用于存储仅在当前文件内部使用的数据。
在C语言中,可以使用const关键字来定义常量。一旦一个变量被声明为const,它的值就不能被修改。
尝试在一个函数被定义之前使用它,编译器会报错,因为它遵循“先定义后使用”的规则。这意味着在调用一个函数之前,编译器需要知道这个函数的签名(即函数名、返回类型以及参数类型和数量)
这种状态下是通过CAN_cmd_gimbal(3000, 5000, 0, 0);直接将电流值发送到电机上的(开环)
application\struct_typedef.h对各种数据类型做了重定义;这个文件没有.c文件
Clion:取消注释与添加注释快捷键相同
单行注释:光标定位到指定代码行Ctrl + /
多行注释:光标定位到多行注释中,或选定全部被注释的内容+Ctrl + shift+ /
注意:单行注释的添加注释与取消注释操作完全相同,但多行注释时略有不同。
相关文章:

RM电控工程讲义
HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) 是一个回调函数,通常在STM32的HAL库中用于处理CAN(Controller Area Network)接收FIFO 0中的消息。当CAN接口在FIFO 0中有待处理的消息时,这个函数会被调用。 HAL库C…...

论文阅读:《Deep Learning-Based Human Pose Estimation: A Survey》——Part 1:2D HPE
目录 人体姿态识别概述 论文框架 HPE分类 人体建模模型 二维单人姿态估计 回归方法 目前发展 优化 基于热图的方法 基于CNN的几个网络 利用身体结构信息提供构建HPE网络 视频序列中的人体姿态估计 2D多人姿态识别 方法 自上而下 自下而上 2D HPE 总结 数据集…...
C语言——oj刷题——杨氏矩阵
目录 1. 理解杨氏矩形的特点 2. 实现杨氏矩形查找算法 3. 编写示例代码 当我们谈到杨氏矩形时,我们指的是一种在二维数组中查找目标元素的高效算法。它是由杨氏(Yan Shi)教授提出的,因此得名为杨氏矩形。 杨氏矩形问题的场景是…...
C++ 50道面试题
1. static关键字 1.全局static变量 存储位置:静态存储区,在程序运行期间一直存在 初始化: 未手动初始化的变量自动初始化为0 作用域: 从定义之处开始,到文件结束,仅能在本文件中使用 2.局部static变量…...
寒假学习记录14:JS字符串
目录 查找字符串中的特定元素 String.indexOf() (返回索引值) 截取字符串的一部分 .substring() (不影响原数组)(不允许负值) 截取字符串的一部分 .slice() (不影响原数…...

【数学建模】【2024年】【第40届】【MCM/ICM】【C题 网球运动中的“动量”】【解题思路】
一、题目 (一) 赛题原文 2024 MCM Problem C: Momentum in Tennis In the 2023 Wimbledon Gentlemen’s final, 20-year-old Spanish rising star Carlos Alcaraz defeated 36-year-old Novak Djokovic. The loss was Djokovic’s first at Wimbledon…...

无人驾驶LQR控制算法 c++ 实现
参考博客: (1)LQR的理解与运用 第一期——理解篇 (2)线性二次型调节器(LQR)原理详解 (3)LQR控制基本原理(包括Riccati方程具体推导过程) (4)【基础…...

Karnaugh map (卡诺图)
【Leetcode】 289. Game of Life According to Wikipedia’s article: “The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Horton Conway in 1970.” The board is made up of an m x n grid of cells, wh…...
C# CAD 框选pdf输出
在C#中进行AutoCAD二次开发时,实现框选(窗口选择)实体并输出这些实体到PDF文件通常涉及以下步骤: public ObjectIdCollection GetSelectedEntities() {using (var acTrans HostApplicationServices.WorkingDatabase.Transaction…...

【Linux】 Linux 小项目—— 进度条
进度条 基础知识1 \r && \n2 行缓冲区3 函数介绍 进度条实现版本 1代码实现运行效果 版本2 Thanks♪(・ω・)ノ谢谢阅读!!!下一篇文章见!!! 基础知识 1 \r &&a…...

Sora和Pika,RunwayMl,Stable Video对比!网友:Sora真王者,其他都是弟
大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…...

Go内存优化与垃圾收集
Go提供了自动化的内存管理机制,但在某些情况下需要更精细的微调从而避免发生OOM错误。本文介绍了如何通过微调GOGC和GOMEMLIMIT在性能和内存效率之间取得平衡,并尽量避免OOM的产生。原文: Memory Optimization and Garbage Collector Management in Go 本…...

【Spring】Bean 的生命周期
一、Bean 的生命周期 Spring 其实就是一个管理 Bean 对象的工厂,它负责对象的创建,对象的销毁等 所谓的生命周期就是:对象从创建开始到最终销毁的整个过程 什么时候创建 Bean 对象?创建 Bean 对象的前后会调用什么方法…...

云计算基础-存储基础
存储概念 什么是存储: 存储就是根据不同的应用程序环境,通过采取合理、安全、有效的方式将数据保存到某些介质上,并能保证有效的访问,存储的本质是记录信息的载体。 存储的特性: 数据临时或长期驻留的物理介质需要保…...

问题:人的安全知识和技能是天生的。() #媒体#知识分享#学习方法
问题:人的安全知识和技能是天生的。() 人的安全知识和技能是天生的。() 参考答案如图所示 问题:()是党和国家的根本所在、命脉所在,是全国各族人民的利益所在、幸福所在。 A.人民当家作主 B.坚持和完善…...

【数据分享】2001~2020年青藏高原植被净初级生产力数据集
各位同学们好,今天和大伙儿分享的是2001~2020年青藏高原植被净初级生产力数据集。如果大家有下载处理数据等方面的问题,您可以私信或评论。 朱军涛. (2022). 青藏高原植被净初级生产力数据集(2001-2020). 国家青藏高原数据中心. …...

【Spring MVC篇】返回响应
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Spring MVC】 本专栏旨在分享学习Spring MVC的一点学习心得,欢迎大家在评论区交流讨论💌 目录 一、返回静态页面…...

阿里云BGP多线精品EIP香港CN2线路低时延,价格贵
阿里云香港等地域服务器的网络线路类型可以选择BGP(多线)和 BGP(多线)精品,普通的BGP多线和精品有什么区别?BGP(多线)适用于香港本地、香港和海外之间的互联网访问。使用BGP…...

(08)Hive——Join连接、谓词下推
前言 Hive-3.1.2版本支持6种join语法。分别是:inner join(内连接)、left join(左连接)、right join(右连接)、full outer join(全外连接)、left semi join(左…...

创新技巧|迁移到 Google Analytics 4 时如何保存历史 Universal Analytics 数据
Google Universal Analytics 从 2023 年 7 月起停止收集数据(除了付费 GA360 之外)。它被Google Analytics 4取代。为此,不少用户疑惑:是否可以将累积(历史)数据从 Google Analytics Universal 传输到 Goog…...
怎样将win11+ubuntu双系统的ubuntu从机械硬盘迁移至固态硬盘(1)
将 Ubuntu 从机械硬盘迁移到固态硬盘是一个涉及多个步骤的过程。以下是一个基本的迁移指南: 1. 前期准备 1.1 备份数据: 确保你已备份数据,以防止在迁移过程中出现意外导致任何数据丢失。 1.2 固态硬盘安装: 确保固态硬盘正确…...
如何查询服务器的端口号
要查询服务器上某个服务正在使用的端口号,可以使用几个不同的工具和方法,具体方法取决于你对服务器的访问权限以及具体的操作系统。以下是一些常用的方法: 1. 在Linux系统上 1.1 使用 netstat 命令(需要管理员权限)&…...

据传苹果将在WWDC上发布iOS 26 而不是iOS 19
苹果可能会对其操作系统的编号方式做出重大改变,基于年份的新版系统会将iOS 19重新命名为 iOS 26,同时 macOS 也会以同样的方式命名。 苹果的编号系统相当简单,版本号每年都会像钟表一样定期更新。然而,今年秋天情况可能有所不同&…...

基本数据指针的解读-C++
1、引言 笔者认为对于学习指针要弄清楚如下问题基本可以应付大部分的场景: ① 指针是什么? ② 指针的类型是什么? ③ 指针指向的类型是什么? ④ 指针指向了哪里? 2、如何使用指针 使用时的步骤如下: ① …...

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.8 R语言解题
本文是实验设计与分析(第6版,Montgomery著,傅珏生译) 第5章析因设计引导5.7节思考题5.8 R语言解题。主要涉及方差分析,正态假设检验,残差分析,交互作用图。 (a) dataframe<-data.frame( Lightc(580,568…...

【DAY34】GPU训练及类的call方法
内容来自浙大疏锦行python打卡训练营 浙大疏锦行 知识点: CPU性能的查看:看架构代际、核心数、线程数GPU性能的查看:看显存、看级别、看架构代际GPU训练的方法:数据和模型移动到GPU device上类的call方法:为什么定义前…...
C++ 图像处理库 CxImage 简介 (迁移至OpenCV)
文章目录 核心功能特点局限性与替代方案常用方法构造函数从数组创建图像访问属性访问像素点Windows平台支持 常用方法迁移至OpenCV CxImage 是一款功能强大的图像处理类库,主要用于 Windows 平台的图像处理任务。它支持多种图像格式的加载、保存、编辑及特效处理&am…...

LiveWallpaperMacOS:让你的 Mac 桌面动起来
随着桌面美化需求的不断提升,用户对于桌面壁纸的要求已经不再局限于静态图片。越来越多的 Mac 用户希望桌面能像 Windows 一样,拥有动态壁纸,展现个性、提升体验。LiveWallpaperMacOS 正是这样一款让你的 Mac 桌面焕发活力的开源项目。 本文将详细介绍 LiveWallpaperMacOS …...
有什么excel.js支持IE11,可以显示EXCEL单元格数据,支持单元格合并,边框线,单元格背景
有什么excel.js支持IE11,可以显示EXCEL单元格数据,支持单元格合并,边框线,单元格背景 在 IE11 环境下操作 Excel 且需要支持单元格合并、边框、背景等格式时,需考虑兼容性较强的库。以下是符合需求的工具及对比分析: 1. SheetJS(js-xlsx&am…...
模板应用更新同步到所有开发中的应用
需求是为多个 Vue 3 应用方便地同步模板更新,并且模板自身也可能演进,采用 Git 上游仓库 (Upstream) 策略。这种方法在操作上相对直观,更贴近常规的 Git 工作流,并且能较好地处理模板更新中可能涉及到的配置文件、依赖项以及 Vue …...