九、e2studio VS STM32CubeIDE之const修饰BSP函数的形参

目录

一、概述/目的

二、通过串口发送函数对比

2.1 stm32 hal库 VS renesas FSP

2.2 const修改函数形参的作用

2.2.1 值传递-副本

2.2.2 指针传递(就近原则)

2.2.2.1 const修饰:*P

2.2.2.2 const修饰:指针变量P

2.2.2.3 const修饰:*P和P

三、总结


一、概述/目的

1、继续【嵌入式科普(16)c语言函数参数的传递方式】话题,对比BSP函数的封装
2、通过对比分享const修饰函数的形参的作用和目的

二、通过串口发送函数对比

2.1 stm32 hal库 VS renesas FSP

  • stm32 hal库

HAL_StatusTypeDef HAL_UART_Transmit_IT( UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)
  • renesas FSP

fsp_err_t R_SCI_UART_Write (uart_ctrl_t * const p_api_ctrl, uint8_t const * const p_src, uint32_t const bytes)

2.2 const修改函数形参的作用

2.2.1 值传递-副本

  • uint32_t const bytes和const uint32_t bytes等价

  • 表示整型变量bytes不可修改

  • 形参bytes是副本,无法修改原值,但可以修改

  • const修饰形参bytes,函数内也无法修改

2.2.2 指针传递(就近原则)

2.2.2.1 const修饰:*P
  • const uint8_t *pData和 uint8_t const *pData等价

  • 表示函数内无法修原数据,保护原始数据

  • 但函数内可以修改pData,例如pData++;

2.2.2.2 const修饰:指针变量P
  • uart_ctrl_t * const p_api_ctrl

  • 表示函数内无法修改指针p_api_ctrl,也就是常量指针,即p_api_ctrl++是错误的

  • 但指针p_api_ctrl指向的原值可以修改,即p_api_ctrl->open可以修改

2.2.2.3 const修饰:*P和P
  • uint8_t const * const p_src

  • 表示指针变量p_src(常量指针)和p_src指向的内容都无法修改

  • 表示函数内无法修原数据(保护原始数据),函数内也不能修改指针p_src(常量指针),即p_src++

三、总结

  • const修饰按就近原则理解,可能有:修饰基本类型、指针类型P、*P

  • const修饰谁,谁就无法改变,即只读,无法++。例如无法p++、*p++

  • const修饰库函数形参,保证了非需要的修改原值,也保证了函数内非需要的修改,也起到提醒实现函数的程序员

  • 瑞萨的FSP提高代码的可读性和安全性,通过限制变量和指针的修改来减少意外错误的可能性。

图片

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

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

相关文章

手撸XXL-JOB(二)——定时任务管理

在上一节中,我们介绍了SpringBoot中关于定时任务的执行方式,以及ScheduledExecutorService接口提供的定时任务执行方法。假设我们现在要写类似XXL-JOB这样的任务调度平台,那么,对于任务的管理,是尤为重要的。接下来我们…

最新Linux Debian12安装和使用ImageMagick图像处理工具 常见图片png、jpg格式转webp格式

在Linux系统中,使用ImageMagick可以图片格式转换,其中最常用的是通过命令行工具进行。 ImageMagick是一个非常强大的图像处理工具集,它包含了许多用于图像转换的命令。 一、安装ImageMagick(如果尚未安装)&#xff1…

在线音乐系统

文章目录 在线音乐系统一、项目演示二、项目介绍三、部分功能截图四、部分代码展示五、底部获取项目(9.9¥带走) 在线音乐系统 一、项目演示 音乐网站 二、项目介绍 基于springbootvue的前后端分离在线音乐系统 登录角色 : 用户、管理员 用…

Git 的原理与使用(中)

Git 的原理与使用(上)中介绍了Git初识,Git的安装与初始化以及工作区、暂存区、版本库相关的概念与操作,本文接着上篇的内容,继续深入介绍Git在的分支管理与远程操作方面的应用。 目录 五、分支管理 1.理解分支 2.创…

java约拍摄影小程序

获取源码配套资料论文等、问题解答,可以加华神扣扣:3753599439 扣扣:1590404240 叩叩:1306749621

数据结构与算法学习笔记十---链队列的表示和实现(C语言)

目录 前言 1.什么是链队 2.链队的表示和实现 1.定义 2.初始化 3.销毁 4.清空 5.空队列 6.队列长度 7.获取队头 8.入队 9.出队 10.遍历队列 11.完整代码 前言 本篇博客介绍链栈队列的表示和实现。 1.什么是链队 链队是采用链式存储结构实现的队列。通常链队使用单…

【知识拓展】大白话说清楚:IP地址、子网掩码、网关、DNS等

前言 工作中常听别人说的本地网络是什么意思?同一网段又是什么意思?它俩有关系吗? 在工作中内经常会遇到相关的网络问题,涉及网络通信中一些常见的词汇,如IP地址、子网掩码、网关和DNS等。具体一点:经常会…

申请免费的必应搜索API

申请免费的必应搜索API 文章目录 申请免费的必应搜索API前言一、原理1.1 登录1.2 进入1.3 获取密钥1.4 申请VISA信用卡1.5 创建必应自定义搜索资源 二、创建成功 前言 准备条件: 1、outlook邮箱 2、招商银行全币种VISA信用卡【建议之前就有一张招商银行信用卡&…

【opencv】图像拼接实验

实验环境:anaconda、jupyter notebook 实验用到的包:opencv、matplotlib、numpy 注:opencv在3.4.2之后sift就不是免费的了 我用的是3.4.1.15版本 实验使用到的图片 一、sift函数获取特征值 读入图片 book cv2.imread(book.png, cv2.IMRE…

苹果macOS无法给App麦克风授权解决办法

好久没有在电脑上录制课程了,有些东西还是录下来记忆深刻,却意外发现MAC系统升级后无法授权给第三方的App使用摄像头和麦克风,而录屏软件是需要开启麦克风和摄像头才能录制屏幕上的操作和声音,官方提示在第三方APP若有使用摄像头和…

pyqt QComboBox下拉列表框控件

pyqt QComboBox下拉列表框控件 QComboBox效果代码 QComboBox QComboBox 是 PyQt(中的一个控件,它允许用户从下拉列表中选择一个选项。这个控件在需要用户从预定义选项中进行选择时非常有用。 效果 代码 import sys from PyQt5.QtWidgets import QAppl…

vite创建的项目使用rem适配

下面以创建vue3.0 项目为例: npm init vitelatest “名称” 选择vue (选择你所对应的语言) 更具提示步骤执行 cd xxx npm i npm run dev 然后再项目中使用 rem 需要安装插件 第一步安装插件 npm i amfe-flexible npm i postcss-pxtorem 第二…

CS144 Checkpoint 4: interoperating in the world(2024)

分析网络路径和性能: mtr命令 mtr 输出的详细分析: mtr 162.105.253.58 命令用于结合 traceroute 和 ping 的功能,实时监测并分析从你的计算机到目标主机(IP 地址 162.105.253.58,北京大学计算中心)之间…

Nginx配置Referer防盗链

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 HTTP Referer是Hea…

PBOOTCMS|URL静态制作教程(已解答)

0、先解压源码文件,在覆盖静态文件,全部点是。 打开程序后台登录地址www.xxx.com(你的域名)/admin.php/Menu/index 打开程序后台--系统菜单--菜单新增(清理缓存后重新登录账号) (选择父菜单,菜单名称&#…

ROS2+TurtleBot3+Cartographer+Nav2实现slam建图和导航

0 引言 入门机器人最常见的应用就是slam建图和导航,本文将详细介绍这一流程, 便于初学这快速上手。 首先对需要用到的软件包就行简单介绍。 turtlebot3: 是一个小型的,基于ros的移动机器人。 学习机器人的很多示例程序都是基于turtlebot3。 …

【Java基础】枚举类的方法及应用

如何实现让一个类有固定个数的对象 手动封装构造方法(private) → 创建静态对象 → final修饰静态对象,使其成为常量 class Season { //枚举类public final static Season SPRING new Season();public final static Season SUMMER new Se…

废品回收微信小程序基于FastAdmin+ThinkPHP+UniApp(源码搭建/上线/运营/售后/更新)

一款基于FastAdminThinkPHPUniApp开发的废品回收系统,适用废品回收站、再生资源回收公司上门回收使用的小程序。 一、FastAdmin框架特色功能及优势 模块化开发:控制器、模型、视图、JS一一对应,使用RequireJS进行插件机制,支持插…

sql操作、发送http请求和邮件发送 全栈开发之路——后端篇(2)

全栈开发一条龙——前端篇 第一篇:框架确定、ide设置与项目创建 第二篇:介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇:setup语法,设置响应式数据。 第四篇:数据绑定、计算属性和watch监视 第五篇 : 组件…

[BJDCTF 2020]easy_md5、[HNCTF 2022 Week1]Interesting_include、[GDOUCTF 2023]泄露的伪装

目录 [BJDCTF 2020]easy_md5 ffifdyop [SWPUCTF 2021 新生赛]crypto8 [HNCTF 2022 Week1]Interesting_include php://filter协议 [GDOUCTF 2023]泄露的伪装 [BJDCTF 2020]easy_md5 尝试输入一个1,发现输入的内容会通过get传递但是没有其他回显 观察一下响应…