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+ /

注意:单行注释的添加注释与取消注释操作完全相同,但多行注释时略有不同。

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

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

相关文章

斯坦福大学全能家政服务机器人Mobile ALOHA以及“小群体大智慧”Zooids集群机器人

斯坦福大学成功研发出低成本自主进化克隆人类行为和任务的能力全能型家政服务机器人。 原文标题: 【Mobile ALOHA-Learning Bimanual Mobile Manipulation with Low-Cost Whole-Body Teleoperation】 论文链接:【Mobile ALOHA (mobile-aloha.github.io)】。 以及由斯坦福大学…

【Linux】进程信号的保存 | 自定义捕捉

文章目录 三、信号的阻塞(信号的保存)1. 信号相关其他常见概念2. 在内核中的表示3. sigset_t类型4. 信号集操作函数函数列表注意事项 5. 读取/修改block位图 - sigprocmask6. 读取pending位图 - sigpending 四、信号捕捉1. 信号捕捉的初步认识自定义捕捉…

A股上市公司绿色化转型指数(2007-2022)

数据来源:上市公司年报、上市公司网站信息、上市公司社会责任报告 时间跨度:2007-2022年 数据范围:中国A股上市公司 数据指标 参考Loughran & Mcdonald(2011)的研究,利用年报中披露的文本信息测量企业…

心律守护 基于机器学习的心脏病预测

心律守护 基于机器学习的心脏病预测 心律守护 基于机器学习的心脏病预测项目背景与意义项目数据与特征数据分析与预处理机器学习模型建立与评估结语 心律守护 基于机器学习的心脏病预测 在当今数字化时代,机器学习的应用已经渗透到了医疗保健领域的各个层面。其中&…

什么是PAGA系统

PAGA系统是一种公共广播和通用报警系统,它在船舶、海上钻井平台、石油化工、天然气开采等行业的应用非常广泛。当遇到紧急情况或其他特殊情况时,PAGA系统能够在大范围内进行喊话广播或报警。这种系统通过自动电话系统(如PABX,即自…

【Python--网络编程之Ping命令的实现】

🚀 作者 :“码上有前” 🚀 文章简介 :Python开发技术 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 Python网络编程之Ping命令的实现 往期内容代码见资源,效果图如下一、实验要求二、协…

巴伦周刊:全球最赚钱对冲基金的成功秘诀是什么?

对冲基金界的明星们过去常常大起大落,有时甚至会实现大满贯式的全面成功,比如约翰•保尔森(John Paulson)在2007-09年金融危机前做空美国房地产市场赚了200亿美元。 但摇摆不定的对冲基金近年来并不是大赢家,相反最好的回报来自于多策略、多…

深度学习系列53:大模型微调概述

参考系列文章:https://zhuanlan.zhihu.com/p/635152813 github链接:https://github.com/liguodongiot/llm-action 1 训练范式 下面这种instructive learning,在模型参数达到80亿后,会发生质的提升: 类似的还有手写pr…

鸿蒙开发系列教程(二十三)--List 列表操作(2)

列表样式 1、设置内容间距 在列表项之间添加间距,可以使用space参数,主轴方向 List({ space: 10 }) { … } 2、添加分隔线 分隔线用来将界面元素隔开,使单个元素更加容易识别。 startMargin和endMargin属性分别用于设置分隔线距离列表侧…

2024HVV | 12款开源渗透测试工具(非常详细)零基础入门到精通,收藏这一篇就够了

回顾过去,黑客入侵异常困难,需要大量手动操作。然而,如今,一套自动化测试工具让渗透测试人员变身“半机械人”,能够比以往任何时候都更轻松地完成更多测试。以下12款开源渗透测试工具,可以帮助渗透测试人员…

微信小程序: 获取accessToken,手机号, 小程序二维码,openId与unionId 公共配置类(核心篇)

全文目录,一步到位 1.前言简介1.1 专栏传送门 2. 微信小程序公用功能2.1 配置准备工作2.1.1 配置文件准备(单体放yml中 微服务放配置中心)2.1.2 获取配置文件中的小程序配置2.1.3 设置redis配置 2.2 创建不同功能工具类2.2.1 创建微信服务工具类WechatServiceUtils2.2.2 创建Re…

Java 基于 SpringBoot+Vue 的酒店管理系统,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

每日五道java面试题之java基础篇(十)

目录: 第一题 JVM有哪些垃圾回收器?第二题 垃圾回收分为哪些阶段?第三题 线程的⽣命周期?线程有⼏种状态?第四题.ThreadLocal的底层原理第五题.并发、并⾏、串⾏之间的区别 第一题 JVM有哪些垃圾回收器? ● 新⽣代收集…

YOLOv8制作自定义数据集并训练

YOLOv8制作自定义数据集并训练 前言一、制作自定义数据集1、建立相应文件夹2、下载图片3、为图片打标签(1)安装labelimg(2)打开labelimg(3)标记图片 二、按比例移动自定义数据集中的内容三、建立数据集测试…

2024年危险化学品经营单位主要负责人证模拟考试题库及危险化学品经营单位主要负责人理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年危险化学品经营单位主要负责人证模拟考试题库及危险化学品经营单位主要负责人理论考试试题是由安全生产模拟考试一点通提供,危险化学品经营单位主要负责人证模拟考试题库是根据危险化学品经营单位主…

机器学习入门--LSTM原理与实践

LSTM模型 长短期记忆网络(Long Short-Term Memory,LSTM)是一种常用的循环神经网络(RNN)变体,特别擅长处理长序列数据和捕捉长期依赖关系。本文将介绍LSTM模型的数学原理、代码实现和实验结果,并…

OpenCV库及在ROS中使用

OpenCV库及在ROS中使用 依赖 cv_bridge image_transport roscpp rospy sensor_msgs std_msgsCMakeLists.txt添加 find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) target_link_libraries(pub_img_topic ${catkin_LIBRARIES} ${Opencv_LIBS}) C …

基于springboot大学生租房系统源码和论文

伴随着全球信息化发展,行行业业都与计算机技术相衔接,计算机技术普遍运用于各大行业,大学生租房系统便是其中一种。实施计算机系统来管理可以降低大学生租房管理的成本,使整个大学生租房的发展和服务水平有显著提升。 本论文主要面…

Github Copilot是什么?Ai高效编程!一键远程授权…

GitHub Copilot是一款Ai编程插件,由OpenAi和Github联合推出,目前支持主流的IDE编辑器安装使用,包括JetBrains IDEs、VSCode、Visual Studio、Neovim等。 官方地址:https://github.com/features/copilot 官方文档:http…

VBA即用型代码手册之取消隐藏工作表及删除工作表

我给VBA下的定义:VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率,而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想,积木编程最重要的是积木如何搭建…