如何使用Understand软件查看STM32单片机HAL库函数调用关系

news2024/11/28 2:53:43

  在使用STM32单片机的HAL库函数编程时,会发现好多中断函数里面都有各种回调函数,还有好多函数的调用深度比较深,在编写代码的时候,有时候想查看某个函数是如何被调用的,查看起来非常麻烦。这时候就可以使用Understand软件来查看函数的调用关系图。

  这个软件的使用方法可以查看 嵌入式代码查看分析利器—Understand这篇文章。
  用Understand软件查看keil工程编写的单片机代码时,会出现一种情况就是许多库函数不能跳转。
在这里插入图片描述
  比如要查看HAL_CAN_IRQHandler这个函数,按住ctrl键单击鼠标时,发现并没有跳转到HAL_CAN_IRQHandler这个函数内部。
在这里插入图片描述
  直接打开函数所在的文件后发现,这个函数并没有被编译,全是是灰色的界面,这是为什么呢?明明在keil工程中可以正常使用,但是在Understand中却没有被编译。这是在keil软件中有一个设置专门来声明头文件的。
在这里插入图片描述
  keil软件中单击魔术棒工具,打开选项设置界面,切换到C/C++选项,此时在Difine选项后面填写的USE_HAL_DRIVER,STM32F407xx这两个值就是宏定义的声明,当keil软件编译时,会自动把这两个声明编译进去。但是Understand软件在工程代码中却找不到这两个宏定义,所以就默认这两个宏定义没有定义,相关的代码就不会被编译。如果想要Understand软件编译相关代码,那么就需要手动将这两个宏定义声明添加到代码中去。由于HAL库的代码都包含 stm32f4xx.h这个头文件,那么就将宏定义写在这个头文件里面。这个头文件的名称和自己使用的单片机型号有关,我用的单片机是STM32F407所以头文件名称就是·stm32f4xx.h·,如果使用的是STM32F103系列单片机就找·stm32f1xx.h·头文件。
在这里插入图片描述

  在Understand打开stm32f4xx.h这个头文件,在最开始的位置添加宏定义声明

#ifndef USE_HAL_DRIVER
 #define USE_HAL_DRIVER
 #endif

 #ifndef STM32F407xx
 #define STM32F407xx
 #endif

在这里插入图片描述

  然后在工具栏选择Project — Analyze All Files,重新编译所有文件。
在这里插入图片描述
  这时候再打开stm32f4xx_hal_can.c文件
在这里插入图片描述
  此时中断函数就被编译了,在HAL_CAN_IRQHandler函数名上面按住ctrl键单击鼠标,此时就能正常跳转到这个函数内部了。
在这里插入图片描述
  这时候如果想查看can中断的回调函数,就选中HAL_CAN_RxFifo0MsgPendingCallback函数,然后再调用关系中选择Called By
在这里插入图片描述
  这时就可以清晰的看出,从can.c文件里面调用了HAL_CAN_IRQHandler函数,而这个函数又调用了can.c文件里面的 HAL_CAN_RxFifo0MsgPendingCallback函数。在这里插入图片描述
  也可以查看HAL_CAN_IRQHandler函数里面都调用了哪些回调函数,鼠标双击选中HAL_CAN_IRQHandler函数名,然后再工具蓝调用关系图中选择Calls。
在这里插入图片描述

  可以看到HAL_CAN_IRQHandler函数中回调函数有很多个。
在这里插入图片描述
  通过这种手动增加宏定义的方法,就可在Understand软件中查看HAL库函数的调用关系了,通过图形化的界面帮助我们在写程序的时候更加高效。

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

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

相关文章

Android活动生命周期

GitHub:https://github.com/MADMAX110/Stopwatch 活动的生命不只是有创建和撤销,onCreate和onDestroy方法用来处理整个生命周期,除了这两个方法,另外还有一些处理活动可见性的生命周期方法。 具体来讲,有三个关键的生…

Flink学习——DataStream API

一个flink程序,其实就是对DataStream的各种转换。具体可以分成以下几个部分: 获取执行环境(Execution Environment)读取数据源(Source)定义基于数据的转换操作(Transformations)定义…

.net6 接收json数据 Controller http post

.net6 接收json数据 Controller http post 要添加这两个包 前端ajax请求 function tst() {$.ajax({type: "POST",contentType: "application/json",url: "/HelloWorld/Welcome",data: JSON.stringify({ "ID":1,"name": &…

Qt实现undo和redo功能--连续后退

刚开始想做这个的时候,我专门去找了Qt官方的测试例子,运行起来点了点,代码翻了翻。然后照猫画虎般的写了个测试例子。 不明白,为什么每个例子旁边会有个命令的显示列表,还巨丑的那种,这如果要放在别的程序…

DJ6-4 文件存储空间的管理

目录 6.4.1 空闲表 1、存储空间的分配与回收 2、空闲表法的优缺点 6.4.2 空闲链表 1、空闲盘块链 2、空闲盘区链 6.4.3 位示图 1、位示图的表示 2、存储空间的分配 3、存储空间的回收 4、位示图法的优缺点 6.4.4 成组链接 1、空闲盘块的组织 plus 个人理解图…

前端web入门-HTML-day01

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 HTML初体验 HTML 定义 标签语法 总结: HTML 基本骨架 基础知识: 总结&#…

20年磨一剑,数慧时空推出智能遥感云平台DIEY及自然资源多模态大模型“长城”

5月17日,主题为“时空智能 从感知到决策”的第十二届全球地理信息开发者大会(WGDC2023)在北京昆泰酒店举行。大会聚集了千余位产业专家、行业用户、创新企业等业界精英,共话时空智能时代下的技术发展与应用创新。中国科学院院士、…

初始计算机操作系统——进程与线程,多线程以及Thread类的创建和属性

目录 通过前半篇文章需要了解 1.进程(process/task):运行起来的可执行文件。 为啥要有进程? 如何解决这个问题? (1)进程池: (2)使用线程: 为啥线…

国考省考行测:判断推理,类比推理1,概念关系,包含关系,交叉关系,并列关系,全同关系

国考省考行测:判断推理,类比推理1,概念关系,包含关系,交叉关系,并列关系,全同关系 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论&#x…

chatgpt赋能Python-libreoffice_python扩展

LibreOffice Python扩展: 提升办公效率的利器 如果你一直在寻找一种提高办公效率的方法,那么你肯定会喜欢LibreOffice Python扩展。作为LibreOffice的一个特性,它可以让你使用Python编写宏程序自动化你的日常办公任务。 什么是LibreOffice Python扩展&…

力扣sql中等篇练习(二十一)

力扣sql中等篇练习(二十一) 1 最大数量高于平均水平的订单 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # Write your MySQL query statement below WITH t1 as (SELECT order_id,avg(quantity) AquantityFROM OrdersDeta…

chatgpt赋能Python-numpy数据预处理

Numpy数据预处理综述 介绍 Numpy是Python中最流行的数学库之一,可以用于高效的处理大型数据。Numpy提供了各种强大的数据结构和函数,使得数据分析和处理变得更加容易和直观。本文将介绍numpy中的一些数据预处理技术,包括数据清洗、缩放、归…

chatgpt赋能Python-mingw编译python

Mingw编译Python:一种常用的解决方案 在Python开发中,为了获得更好的性能,我们通常会选择编译Python源代码。而在Windows平台上, Mingw编译器是一种常用的解决方案。本文将介绍Mingw编译Python的过程,并探讨其优缺点。…

chatgpt赋能Python-numpy创建

Numpy:Python中的数学计算利器 作为Python中进行数学计算和科学计算最重要的库之一,Numpy已经成为了Python编程中的标配。Numpy以其出色的数组处理能力和矩阵运算效果,让Python用户的数学计算和科学计算变得更加简单高效。在本篇文章中&…

【半监督学习】Match系列.4

介绍几篇关于半监督学习的论文:CLS(arXiv2022),Ada-CM(CVPR2022),SemiMatch(CVPR2022). CLS: Cross Labeling Supervision for Semi-Supervised Learning, arXiv2022 解…

mysql增量备份

目录 一、修改配置文件,开启增量备份功能 (1)查看是否已经开启了 (2)修改配置文件开启 (3)增量记录文件 二、还原增量备份 (1)修改了数据 (2&#xff…

使用thrift进行RPC通信(附c程序示例)

前言 为了实现不同语言的程序跨进程、跨主机通信,一般可以采用mq或rpc框架来实现。 对于异步通知的场景可以使用mq,如zeroMQ。 但对于某些实时性较强且同步的应用场景,使用成熟的rpc框架来实现也是一种比较更好的选择。 开源的rpc框架有很…

MySQL---游标,异常处理,循环构建表

1. 游标 游标(cursor)是用来存储查询结果集的数据类型 , 在存储过程和函数中可以使用光标对结果集进行 循环的处理。光标的使用包括光标的声明、OPEN、FETCH 和 CLOSE. -- 声明语法 declare cursor_name cursor for select_statement -- 打开语法 open cursor_name -- 取值语…

由浅入深Netty基础知识NIO三大组件原理实战

目录 1 三大组件1.1 Channel & Buffer1.2 Selector1.3 多线程版设计1.4 多线程版缺点1.5 线程池版设计1.6 线程池版缺点1.7 selector 版设计 2 ByteBuffer2.1 ByteBuffer 正确使用姿势2.2 ByteBuffer 结构2.3 调试工具类2.4 ByteBuffer 常见方法2.4.1 分配空间2.4.2 向 buf…

chatgpt赋能Python-numpy查找

Numpy查找 - 了解numpy中的查找功能 什么是Numpy? Numpy是Python语言中的一种开源的数学计算库,允许开发者轻松高效地进行数学运算。它提供了一整套矩阵运算方式,支持各种各样的数学函数和数据类型,并且可以与其他Python库良好地…