C51单片机中reentrant关键字的使用,关于MULTIPLE CALL TO FUNCTION警告的问题 关于可重入关键字reentrant的使用现象在一个项目中警告信息如下提示该函数多次调用因为该函数在串口中断和主循环中都有被调用。影响如果在使用该函数期间被中断打断而中断也调用了该函数那么该函数的局部变量会被覆盖。当中断结束返回则此时的变量已经被中断修改了此时的数据不对会出现意想不到的结果。这就是不可重入non-reentrant原因Keil C51 为了省 RAM、提速普通函数的参数和局部变量往往不放在硬件栈上而是放在固定的静态内存里类似全局变量。51单片机资源有限为了提高运行效率C51采用静态分配局部变量的方式所以不可递归。而标准C语言的堆栈是动态分配的。解决方案给需要重复调用的函数加上reentrant关键字使用方式如下图编译器会改成参数/局部变量放到专用的可重入栈上每次调用都有自己的一份不再共用固定地址。这样中断里可以安全再调这个函数。另外递归调用也可以8051 上很少这么干且很吃 RAM最后再编译发现警告消失。注意使用reentrant要另外需要在启动文件中根据内存模型打开对应栈3.IBPSTACK / XBPSTACK / PBPSTACK分别是什么它们对应三种内存模型下的可重入栈指针初始化开关名字含义可重入栈放哪典型场景IBPSTACKIdataBasePointer Stack内部 RAMidataSmall 模型 reentrantPBPSTACKPdataBasePointer Stackpdata一页 256 字节外存Compact 模型 reentrantXBPSTACKXdataBasePointer Stackxdata外部 RAMLarge 模型 reentrant建议什么时候才需要reentrant典型需求中断服务程序里要调用某个也会在主循环调用的函数且该函数有局部变量/参数需要递归某些第三方库明确要求reentrant并说明要开哪一种栈更常见、更稳妥的做法同个函数再复制一份功能完全一样但函数名不一样中断里只置标志、收数据复杂处理放到主循环这样就不需要reentrant参考文章1、C51的再入函数 reentrant RECURSIVE CALL TO SEGMENT2、51单片机与递归的问题

相关新闻

最新新闻

SpringBoot系列19:生产环境性能调优:JVM参数、连接池、接口慢查询优化(完整版)

SpringBoot系列19:生产环境性能调优:JVM参数、连接池、接口慢查询优化(完整版)

文章目录📌 专栏:SpringBoot进阶实战系列🎯 本文独家核心收获(区别于全网水文)一、前言:为什么生产环境必须做性能调优?二、性能调优核心流程(生产标准规范)2.1 标准调优…

2026/7/16 22:02:20
LabVIEW XY图自定义游标系统设计与优化

LabVIEW XY图自定义游标系统设计与优化

1. LabVIEW XY图游标的核心功能与应用场景在测试测量和工业自动化领域,图形化数据显示是最基础也最关键的环节。LabVIEW作为图形化编程的标杆工具,其XY图控件能够直观展示各类传感器采集的时域/频域数据、运动轨迹坐标或任意二维关系曲线。而游标功能&am…

2026/7/16 22:02:20
C语言指针完全指南:从内存模型到实战应用详解

C语言指针完全指南:从内存模型到实战应用详解

很多C语言初学者在接触指针时都会感到困惑,甚至有些开发者工作多年后对指针的理解仍然不够深入。指针作为C语言最核心的特性之一,直接关系到内存管理、数据结构和系统编程的方方面面。本文将系统梳理指针的核心概念、使用方法和常见陷阱,通过…

2026/7/16 22:02:20
Ex tc IIIC T80金属多芯防爆连接器:粉尘环境传感器专用解决方案

Ex tc IIIC T80金属多芯防爆连接器:粉尘环境传感器专用解决方案

一、防爆标志完整释义(Ex tc IIIC T80℃ Dc)1. Ex:防爆电气通用标识2. tc:粉尘外壳保护型,Dc防护等级,仅适配22区粉尘危险区域;仅故障泄漏时短时出现粉尘云,正常工况无持续粉尘爆炸介…

2026/7/16 22:02:20
别踩 2026年录音怎么转换成文字的常见误区:亲测总结的实操经验

别踩 2026年录音怎么转换成文字的常见误区:亲测总结的实操经验

2026年录音转文字不需要手动逐字录入,也不用盲目选最贵的工具,只要选匹配自身需求的AI工具,就能10分钟内完成1小时录音的转写整理。对自媒体从业者来说,不管是访谈录音、直播素材转文字还是线下活动记录,只要提前确认录…

2026/7/16 22:02:20
NickelMenu技术解析:Kobo阅读器自定义菜单系统的架构与实践

NickelMenu技术解析:Kobo阅读器自定义菜单系统的架构与实践

NickelMenu技术解析:Kobo阅读器自定义菜单系统的架构与实践 【免费下载链接】NickelMenu The easiest way to launch scripts, change settings, and run actions on Kobo e-readers. 项目地址: https://gitcode.com/gh_mirrors/ni/NickelMenu NickelMenu是一…

2026/7/16 21:57:20

月新闻