C51单片机中reentrant关键字的使用,关于MULTIPLE CALL TO FUNCTION警告的问题

关于可重入关键字reentrant的使用:

现象:

在一个项目中警告信息如下,提示该函数多次调用,因为该函数在串口中断和主循环中都有被调用。
在这里插入图片描述

影响:

如果在使用该函数期间被中断打断,而中断也调用了该函数,那么该函数的局部变量会被覆盖。当中断结束返回,则此时的变量已经被中断修改了,此时的数据不对,会出现意想不到的结果。

原因:

C51的变量是编译时预先分配好的,每个变量地址已经固定,不会变动。
(51单片机资源有限,为了提高运行效率,C51采用静态分配局部变量的方式,所以不可递归。而标准C语言的堆栈是动态分配的。)

解决方案:

给需要重复调用的函数加上 reentrant关键字,使用方式如下图
在这里插入图片描述

最后再编译发现警告消失。

参考文章:
1、C51的再入函数 reentrant RECURSIVE CALL TO SEGMENT
2、51单片机与递归的问题

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

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

相关文章

MQ-Det: Multi-modal Queried Object Detection in the Wild

首个支持视觉和文本查询的开放集目标检测方法 NeurIPS2023 文章:https://arxiv.org/abs/2305.18980 代码:https://github.com/YifanXu74/MQ-Det 主框图 摘要 这篇文章提出了MQ-Det,一种高效的架构和预训练策略,它利用文本描述的…

u盘格式化和快速格式化的区别是什么?为您揭晓答案

在日常使用中,我们经常遇到U盘无法正常读取或存储数据的情况。这时候,格式化U盘成为一种常见的解决方法。然而,在格式化U盘时,我们面临两种选择:普通格式化和快速格式化。这两种格式化方式有什么区别?我们又…

如何用CHAT帮你提高工作效率?

问CHAT:从规范项目管理流程交付,分别对项目信息安全管理,项目预算管理和项目采购管理三个方面提建议 CHAT回复: 项目信息安全管理: 1. 制定详细的信息安全政策,所有参与项目的员工必须遵守,对其中涉及敏感…

Python从门到精通(九):matploblib图形库

Matplotlib 是一个数字绘图库,可以绘制多种图形 绘制图形 曲线图 import matplotlib.pyplot as pltclass PltDemo:def __init__(self) -> None:# 数据self.squares [1, 4, 9, 16, 25]def init_ax(self):# flg:由生成的一系列绘图构建成的整体个图…

3_流量预测综述阅读_Cellular traffic prediction with machine learning: A survey

为了方便学习英语书写,总结的一些话用英语书写 ♥目录♥ 0、文献来源and摘要1、introduction2、prediction problems and datasets2.1 prediction problems2.2 dataset(1)Telecom Italia 意大利电信 2015(2)City Cell…

【论文精读】GAIA: A Benchmark for General AI Assistants

GAIA: A Benchmark for General AI Assistants 前言Abstract1 Introduction2 Related work3 GAIA3.1 A convenient yet challenging benchmark for general AI assistants3.2 Evaluation3.3 Composition of GAIA3.4 Building and extending GAIA 4 LLMs results on GAIA5 Discu…

LeetCode-2487. 从链表中移除节点【栈 递归 链表 单调栈】

LeetCode-2487. 从链表中移除节点【栈 递归 链表 单调栈】 题目描述:解题思路一:可以将链表转为数组,然后从后往前遍历,遇到大于等于当前元素的就入栈,最终栈里面的元素即是最终的答案。解题思路二:递归&am…

【sqli靶场】第二关和第三关通关思路

目录 前言 一、sqli靶场第二关 1.1 判断注入类型 1.2 判断数据表中的列数 1.3 使用union联合查询 1.4 使用group_concat()函数 1.5 爆出users表中的列名 1.6 爆出users表中的数据 二、sqli靶场第三关 2.1 判断注入类型 2.2 观察报错 2.3 判断数据表中的列数 2.4 使用union联合…

项目播报 | 河北信投数字科技签约璞华科技,以数字化方式全面提升采购效率

近日,璞华科技签约河北信投数字科技有限责任公司(以下简称“河北信投数字科技”)。璞华科技基于璞华采云链产品帮助客户打造采购数字化全景解决方案,实现智慧采购数字化转型升级。 本次强强联合,双方就采购数字化平台建…

企业微信模板卡片消息

投票选择型和多项选择型卡片仅企业微信3.1.12及以上版本支持 文本通知型、图文展示型和按钮交互型三种卡片仅企业微信3.1.6及以上版本支持(但附件下载功能仍需更新至3.1.12) 微工作台(原企业号)不支持展示模板卡片消息 文本通知型…

虚幻学习笔记11—C++结构体、枚举与蓝图的通信

一、前言 结构体的定义和枚举类似,枚举的定义有两种方式。区别是结构体必须以“F”开头命名,而枚举不用。 额外再讲了一下蓝图生成时暴露变量的方法。 二、实现 2.1、结构体 1、定义结构体 代码如下,注意这个定义的代码一定要在“UCLASS()”…

多种DC电源模块的比较和评价

多种DC电源模块的比较和评价 BOSHIDA DC电源模块是一种重要的电子零件,可以将交流电转换为直流电,并为相应的电路提供所需的电能。随着技术的进步,市场上的DC电源模块种类越来越多,不同类型的DC电源模块有着不同的特点和优缺点。 …