【STM32G474】利用Cpp编写STM32代码后,Cubemx修改配置后代码报错147个error,如何处理?

问题描述

打开Cubemx,添加TIM7用于定时器精准延时,生成代码后,Keil提示有147个error。
之前是Cubemx是没有问题的,是利用Cpp编写stm32(将Keil改为Version6)后才导致Cubemx配置失败:
在这里插入图片描述
debug成功图片:
在这里插入图片描述

解决办法

打开GitTortoise,打开日志
在这里插入图片描述

对比两个版本,版本1是正确的,版本2是Cubemx刷新后的错误的,将版本1的port.c和portmacro.h文件另存为当前代码存放的文件夹即可:
在这里插入图片描述
不要把文件搞错了:
在这里插入图片描述
然后编译运行即可!

port.c和portmacro.h是什么文件?

在STM32微控制器的开发中,port.cportmacro.h 是与FreeRTOS实时操作系统(RTOS)相关的两个文件。FreeRTOS是一个开源的、可裁剪的、抢占式的实时操作系统,广泛用于嵌入式系统开发。

portmacro.h

portmacro.h 是一个宏定义文件,它包含了FreeRTOS在与硬件相关的操作中使用的宏。这些宏提供了一种抽象层,使得FreeRTOS的移植工作变得更加容易。通过定义这些宏,可以针对不同的硬件平台调整FreeRTOS的行为,而无需修改FreeRTOS的核心代码。

portmacro.h中,你可能会找到如下几种类型的宏:

  • 任务创建和删除:用于创建和删除任务的宏。
  • 互斥量操作:用于获取和释放互斥量的宏。
  • 信号量操作:用于等待和发送信号量的宏。
  • 中断管理:用于使能和禁用中断的宏。
  • 临界区管理:用于进入和退出临界区的宏,以保护共享资源。
  • 时钟管理:用于获取当前系统时间的宏。

port.c

port.c 是FreeRTOS的另一个源文件,它包含了与硬件紧密相关的代码,通常包括中断处理、上下文切换、tick计数等核心功能。

port.c中,你可能会遇到以下功能:

  • 上下文切换:实现任务切换时保存和恢复寄存器状态的代码。
  • tick处理:处理系统tick中断,通常用于更新系统时间以及检查超时的任务。
  • 中断使能/禁用:控制中断使能和禁用的代码。
  • 内存管理:管理FreeRTOS使用的内存,包括任务控制块(TCB)和堆内存。

STM32和FreeRTOS的移植

在STM32微控制器上移植FreeRTOS时,需要根据STM32的具体硬件特性来实现port.cportmacro.h中的函数和宏。例如,你可能需要实现特定的中断处理逻辑,或者为STM32的内存管理单元(MPU)配置内存保护。

通常,STM32的标准外设库或HAL库已经提供了一些与硬件操作相关的函数,这些函数可以在port.cportmacro.h中被利用,以简化移植工作。

注意事项

  • 确保在使用FreeRTOS之前,你已经阅读了FreeRTOS的官方文档,了解其工作原理和API的使用。
  • 在移植过程中,始终注意FreeRTOS对中断处理和上下文切换的要求,以避免造成系统不稳定。
  • 根据你的应用需求,可能需要对port.cportmacro.h进行适当的修改和优化。

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

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

相关文章

Mybatis进阶2

Mybatis进阶1-CSDN博客 Mybatis入门-CSDN博客 Mybatis入门2-CSDN博客 我们接下来要学习Mybatis的高级查询 我们先在数据库中准备我们需要的数据表 teacher表 课程表:与教师表是一对多的关系,所以有一个外键字段 学生表 由于学生表和课程表是多对多的…

《Python编程从入门到实践》day22

# 昨日知识点回顾 方法重构、驾驶飞船左右移动、全屏显示 飞船不移动解决,问题出在移动变量x更新 # Ship.pysnipdef update(self):"""根据移动标志调整飞船的位置"""# 更新飞船而不是rect对象的x值# 如果飞船右移的标志和飞船外接…

八股Day2 多线程

Day2 多线程 1.线程和进程的区别? 2.并发和并行的区别? 3.创建线程的四种方式 4.线程的run()和start()有什么区别 5.线程包含哪些状态,怎么变化的 6.新建T1 T2 T3三个线程,如何保证他们按顺序执行 7.Notify和notifyAll区别 8.Sle…

微信小程序Picker组件全面解析:如何优雅处理数组对象选择器【代码示例】

微信小程序Picker组件全面解析:如何优雅处理数组对象选择器【代码示例】 基本概念picker组件简介数组对象与picker 实战例演练数据准备picker配置数据绑定与处理显示选中结果 安全性与性能优化结语与讨论 在微信小程序开发中,picker组件扮演着至关重要的…

射频无源器件之电桥

一. 电桥的定义及作用 电桥主要用于实现微波大功率功放系统的功率合成分配,信号采集等功能,被广泛应用于中国及全球4G/5G基站、5G网络覆盖、北斗导航天线、车载高精度导航(无人驾驶)天线等。可将信号分成有相位差的两路,90度电桥相位差90,180度电桥相位差180。 常说的3d…

Redis学习2——SpringBoot整合Redis,Redis工具类

依赖和配置 pom.xml SpringBoot整合Redis&#xff0c;需要引入spring-boot-starter-data-redis依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>当…

使用poi生成word文件时,zip相关的报错

apache poi-检测到Zip Bomb解决方案_zip bomb detected! the file would exceed the max. -CSDN博客

stm32_RTC_2_HAL——stm32CudeMX

介绍 RTC&#xff08;实时时钟&#xff09;不仅仅提供计数功能&#xff0c;它是一个完整的时钟和日历模块&#xff0c;用于提供日期和时间信息。RTC 能够提供年、月、日、星期、时、分、秒等时间信息&#xff0c;并且通常具有闹钟功能&#xff0c;可以用于定时唤醒或触发事件。…

C++学习第十二天(继承)

1、继承的概念以及定义 继承的概念 继承机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行拓展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象程序设计的层次结构&#x…

STM32F103学习笔记 | 报错界面及解决方案 | 1.keil5中文注释的横竖(正与斜)问题

文章目录 一、报错界面二、解决方案参考文献 一、报错界面 二、解决方案 打开设置 在打开的设置选项卡中&#xff0c;图中Font显示的是这个软件当前设置的字体&#xff0c;可以看到字体是仿宋&#xff0c;这就是问题出现的原因&#xff0c;将之改成没有的字体就行了。 可以看…

算法精讲:冒泡排序

1.基本思想 以n个人站队为例,从第一个人开始,依次比较相邻的两个人是否逆序对,(高的在前,矮的在后),若逆序便交换两人,也就是第一个人与第二个人相比较,若逆序便交换两人,第二个人和第三个人比较,若逆序便交换两人,……,直到第n-1个人与第n个人比较为止。经过一轮…

用FPGA+DAC输出“心”形波

1.前言 之前在做信号处理的时候整了一下活&#xff0c;用FPGADAC&#xff08;数模转换器&#xff09;&#xff0c;输出了一个爱心形状的波形&#xff0c;今天整理资料的时候偶然发现了他&#xff0c;现在把他分享出来。当时将DAC的输出接在示波器上显示如下图所示&#xff1a; …

Docker使用进阶篇

文章目录 1 前言2 使用Docker安装常用镜像示例2.1 Docker安装RabbitMQ2.2 Docker安装Nacos2.3 Docker安装xxl-job&#xff08;推荐该方式构建&#xff09;2.4 Docker安装redis2.5 Docker安装mysql 3 Docker自定义镜像3.1 Dockerfile的基本结构3.2 Dockerfile指令3.3 自定义JDK镜…

Sherman-Morrison-Woodbury formula 证明

文章目录 1. 公式2. 证明 1. 公式 M I − u v T ⇒ M − 1 I u v T 1 − v T u (1) MI-uv^T\Rightarrow M^{-1}I\frac{uv^T}{1-v^Tu}\tag{1} MI−uvT⇒M−1I1−vTuuvT​(1) 2. 证明 定义矩阵E表示如下&#xff1a; E [ I u v T 1 ] , D 1 − v T u (2) E\begin{bmatrix…

js手动实现unshift

js 手动实现数组的unshift unshift是什么&#xff1f; unshift() 方法可向数组的开头添加一个或更多元素&#xff0c;并返回新的长度。 注意&#xff1a; 该方法将改变数组的数目。 语法&#xff1a; array.unshift(item1,item2, ..., itemX)代码实现 首先&#xff0c;在…

【2】STM32·FreeRTOS·任务创建和删除

目录 一、任务创建和删除的API函数 1.1、动态创建任务函数 1.2、静态创建任务函数 1.3、任务删除函数 二、任务创建和删除&#xff08;动态方法&#xff09; 三、任务创建和删除&#xff08;静态方法&#xff09; 一、任务创建和删除的API函数 任务的创建和删除本质就是…

Flutter笔记:手动配置VSCode中Dart代码自动格式化

Flutter笔记 手动配置VSCode中Dart代码自动格式化 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csd…

数据结构学习——线性表、顺序表

1.线性表 线性表 &#xff08; linear list &#xff09; 是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一…

Jpa自定义查询结果封装到实体

工具类 import cn.hutool.core.convert.Convert; import cn.hutool.core.text.CharSequenceUtil;import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.List; import java.util.Map;/*** 查询结果集转换工具类 …

在WPS表格(Excel)中,每10行增加一个特定的值

注&#xff1a;如下为WPS表格操作演示 例如1&#xff0d;15的数值是1&#xff0c;16-30就变为2&#xff0c;31-45就变为3&#xff0c;类推&#xff01; 1、在B1单元格输入一个起始值&#xff0c;B2单元格输入公式IF(MOD(ROW(),15)0,B11,B1) 然后鼠标放到B2单元格右下角小点处&…