干货|单片机main()函数退出之后,程序会跑去哪里?

电子工程世界 2023-06-15 07:30

对于嵌入式系统,如果没有运行RTOS,那么程序开发中的主函数main()需要通过某种机制使其永远愉快的运行下去,它没有终点。如果想从main函数中退出,具体干什么是由所使用的C语言编译器决定的。

一、问题提出

在单片机led模块定义函数中看到一个有趣的问题。提问者在进行基本的C51编程实验,编写了一个简单的C51程序如下:

#include 

void test(num) {
    switch(num) {
        case 1: P2_0=0; P2_1=0
            break;
    }
}

void main(void) {
    test(1);
}

程序执行完之后,可以看到实验板上的有两个LED被点亮,另外六个居然微微发亮。

如果在主程序中,增加一个无限循环:while(1); ,则电路板上的就不再会出现“微微点亮”的现象了。

#include 

void test(num) {
    switch(num) {
        case 1: P2_0=0; P2_1=0
            break;
    }
}

void main(void) {
    test(1);
    while(1);
}

上面两种情况的区别,在于第二个程序中主循环 main()函数始终没有退出,而第一个程序,main()函数退出了。似乎前面LED微微点亮 应该与主函数退出之后,单片机都干了些啥有关系。

那么就剩下一个问题:对于普通的嵌入式系统,C语言编程中main()函数退出之后,程序去哪儿了

二、程序去哪儿了?

从上面提问者书写的代码来看,应该是一位C51的爱好者,使用的是C51的编译器,在一款C51开发板上愉快的进行实验。他一开始没有安装嵌入式程序开发的惯例 在主程序void main(void)中利用无限循环将程序控制在主程序函数中,就出现了前面实验结果中令人迷惑的情况。

注:他是一个胆大心细的人,观察还挺仔细的。

2.1 盘古开天辟地

对于C语言编程来说,所有的用户程序世界是从主程序main()开始的。给用户程序开天辟地的任务是由一小段盘古代码STARTUP.A51。

51单片机程序执行流程(STARTUP.A51管理Main函数的执行)

下面截取了STARTUP.A51 代码的一段,可以看到盘古在单片机RESET之后做了点准备工作(初始化全局变量、堆栈指针)之后,就直接跳转至:?C_START

 NAME    ?C_STARTUP

?C_C51STARTUP   SEGMENT   CODE
?STACK          SEGMENT   IDATA

                RSEG    ?STACK
                DS      1

                EXTRN CODE (?C_START)
                PUBLIC  ?C_STARTUP

                CSEG    AT      0
?C_STARTUP:     LJMP    STARTUP1

                RSEG    ?C_C51STARTUP

STARTUP1:

IF IDATALEN <> 0
                MOV     R0,#IDATALEN - 1
                CLR     A
IDATALOOP:      MOV     @R0,A
                DJNZ    R0,IDATALOOP
ENDIF

IF XDATALEN <> 0
                MOV     DPTR,#XDATASTART
                MOV     R7,#LOW (XDATALEN)
  IF (LOW (XDATALEN)) <> 0
                MOV     R6,#(HIGH (XDATALEN)) +1
  ELSE
                MOV     R6,#HIGH (XDATALEN)
  ENDIF
                CLR     A
XDATALOOP:      MOVX    @DPTR,A
                INC     DPTR
                DJNZ    R7,XDATALOOP
                DJNZ    R6,XDATALOOP
ENDIF

IF PPAGEENABLE <> 0
                MOV     PPAGE_SFR,#PPAGE
ENDIF

IF PDATALEN <> 0
                MOV     R0,#LOW (PDATASTART)
                MOV     R7,#LOW (PDATALEN)
                CLR     A
PDATALOOP:      MOVX    @R0,A
                INC     R0
                DJNZ    R7,PDATALOOP
ENDIF

IF IBPSTACK <> 0
EXTRN DATA (?C_IBP)

                MOV     ?C_IBP,#LOW IBPSTACKTOP
ENDIF

IF XBPSTACK <> 0
EXTRN DATA (?C_XBP)

                MOV     ?C_XBP,#HIGH XBPSTACKTOP
                MOV     ?C_XBP+1,#LOW XBPSTACKTOP
ENDIF

IF PBPSTACK <> 0
EXTRN DATA (?C_PBP)
                MOV     ?C_PBP,#LOW PBPSTACKTOP
ENDIF

                MOV     SP,#?STACK-1
                LJMP    ?C_START

                END

上面的代码也被博文51单片机程序执行流程(STARTUP.A51)中进行逐步调试跟踪验证过:

2.2 世界尽头

由于进入main()函数是长跳转,所以main函数是不会正常返回到启动程序STARTUP.A51,那么程序去哪了?

在博文单片机C语言while(1)的问题中作者对于KEIL编译器和PIC的MAPLAB编译器对于main函数的最后时光进行了反汇编查看。

Keil编译器

在main函数的最后,程序增加了一下几行代码:

MOV R0, #0x7F
CLR A
MOV @R0, A
DJNZ R0, (3)
MOV SP, #0x0C
LJMP main

这几条语句,前4条,是将我们单片机的内存的前128个地址清零,第5条,是定义堆栈,第6条,是将程序重新跳转到main函数的首行进行执行。

MAPLAB编译器

PIC 单片机语言程序进行跟踪,发现main() 函数最后一条语句为 reset,也就是单片机直接复位,这是 MAPLAB编译器根据 PIC 单片机特点增加的复位语句。

总结

对于嵌入式系统,如果没有运行RTOS,那么程序开发中的主函数(main())需要通过某种机制使其永远愉快的运行下去,它没有终点。如果想从main函数中退出,具体干什么是由所使用的C语言编译器决定的。

来源:TsinghuaJoking公众号


电子工程世界 关注EEWORLD电子工程世界,即时参与讨论电子工程世界最火话题,抢先知晓电子工程业界资讯。
评论 (0)
  •   电磁环境模拟软件系统深度解读   北京华盛恒辉电磁环境模拟软件系统是专业的技术工具,可生成、捕捉与分析电磁信号,为电气和电子设备搭建仿真测试环境。以下从功能、技术特性、应用场景、主流软件及发展趋势展开介绍。   应用案例   目前,已有多个电磁环境模拟软件系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁环境模拟软件系统。这些成功案例为电磁环境模拟软件系统的推广和应用提供了有力支持。   一、核心功能   电磁环境模拟   信号生成与处理   场景构建与仿真
    华盛恒辉l58ll334744 2025-04-21 10:21 63浏览
  •   智慧华盛恒辉国有单位科研项目审计管理系统介绍   1、建设国有单位科研项目审计管理系统的重大意义   其深远意义体现在科研项目管理的核心环节,不仅关乎管理效能与成果质量的飞跃,还深刻影响着科研资金的优化配置、科研行为的规范性以及国家科技发展战略的顺利推进。   应用案例   目前,已有多个科研项目审计管理系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润科研项目审计管理系统。这些成功案例为科研项目审计管理系统的推广和应用提供了有力支持。   (1)强化科研项目管理的效
    华盛恒辉l58ll334744 2025-04-20 22:54 50浏览
  •   电磁信号模拟系统深度解析   一、系统概述   北京华盛恒辉电磁信号模拟系统作为半实物仿真测试系统,广泛应用于无线通信、军事训练等多领域。它通过软硬件结合,构建逼真电磁信号环境,用于测试电子设备在复杂电磁干扰下的性能表现。   应用案例   目前,已有多个电磁信号模拟系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁信号模拟系统。这些成功案例为电磁信号模拟系统的推广和应用提供了有力支持。   二、系统组成   装备模型库:涵盖雷达、通信设备等各类装备平台及电子装
    华盛恒辉l58ll334744 2025-04-21 10:48 53浏览
  •   智慧华盛恒辉国有单位招标标书查重系统介绍   1、建设国有单位招标标书查重系统的重大意义   (1)保障招标过程的公正性与透明度   在国有单位复杂的招标环境中,标书查重系统犹如一把利剑,精准切割出公平竞争的道路。该系统利用自动化比对与检测技术,快速揭露投标文件中潜藏的相似或重复内容,有效遏制了围标、串标及抄袭等恶劣行为,为招标过程披上了一层公正与透明的外衣。这不仅减少了人为干预的空间,更保障了合法投标人的权益,维护了市场的健康秩序,让每一次招标都成为真正的实力较量。   应用案例
    华盛恒辉l58ll334744 2025-04-20 23:07 69浏览
  •   电磁环境模拟平台系统全解析   北京华盛恒辉电磁环境模拟平台系统是通过技术手段生成、调控和再现复杂电磁环境的专用设备,广泛应用于通信、电子、航空航天、国防等领域。其核心作用是为设备研发、测试和评估提供可控的电磁环境,验证系统在复杂电磁干扰下的性能与可靠性。   应用案例   目前,已有多个电磁环境模拟平台系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁环境模拟平台系统。这些成功案例为电磁环境模拟平台系统的推广和应用提供了有力支持。   一、系统构成   信号发生
    华盛恒辉l58ll334744 2025-04-21 09:40 66浏览
  • 在智能家居与物联网(IoT)技术快速发展的背景下,语音播报功能已成为烟雾报警器等安防设备提升用户体验的核心技术之一。厂家凭借其WTV、WTN、WT588F及WT2605C系列语音芯片,推出了三大烟雾报警器语音方案,覆盖传统、高集成度与智能化需求,为不同场景提供灵活选择。以下从技术特性、应用场景及行业价值三方面展开分析。一、方案对比与技术特性 方案类型核心芯片型号技术优势局限性适用场景传统分立方案WTN6/WT588F/WTV系列音质纯净,模块化设计便于维护;兼容性强,支持外接功放优化音
    广州唯创电子 2025-04-21 08:53 76浏览
  • 85RC16是一款铁电存储器(FRAM),具有低功耗、高耐久性、快速写入等优点。通过芯片文档,可以看到对比常用的eeprom它的一些优势与24C16的对比读写速度 :85RC16的读写速度更快,可达到与I2C总线速率相匹配的水平,没有像24C16那样的写操作延迟和页写限制,能够实现真正的随机字节写入,且不需要等待写周期完成,适合需要频繁、快速读写的应用场合。写入耐久性 :85RC16的写入耐久性更高,可承受的写入次数远超24C16,这使得其在需要频繁更新数据的应用中更具优势,使用寿命更长。功耗
    小手凉凉 2025-04-21 10:17 51浏览
  •   战略仿真推演系统设计方案   一、系统概述   1.1 系统定位   北京华盛恒辉战略仿真推演系统是面向政府、企业及军事机构的决策支持工具。它通过搭建虚拟环境,模拟真实战略场景,助力用户评估不同策略的潜在影响,优化决策流程,提升战略规划的科学性与前瞻性。   应用案例   目前,已有多个战略仿真推演系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润战略仿真推演系统。这些成功案例为战略仿真推演系统的推广和应用提供了有力支持。   二、系统架构设计   2.1 总体架
    华盛恒辉l58ll334744 2025-04-20 16:27 56浏览
  •   国有单位科研项目审计管理系统解析   一、系统建设意义   北京华盛恒辉国有单位科研项目审计管理系统对科研项目管理至关重要,其意义贯穿管理效能提升、资金优化配置、科研合规推进等核心环节,深刻影响国家科技战略实施。   应用案例   目前,已有多个国有单位科研项目审计管理系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润国有单位科研项目审计管理系统。这些成功案例为国有单位科研项目审计管理系统的推广和应用提供了有力支持。   提升科研项目管理质效:作为数字化、智能化管理工
    华盛恒辉l58ll334744 2025-04-20 23:21 56浏览
  • 一、市场背景与竞争优势随着智能家居市场的爆发式增长,消费者对小家电的智能化、交互性需求显著提升。WTVxxx系列语音芯片凭借高性价比、卓越音质与功能集成度,已成为智能小家电领域的核心驱动方案。该系列芯片通过以下优势重塑行业格局:成本优化:集成MCU、语音播报、驱动控制等多功能模块,显著降低硬件成本与开发复杂度;智能化升级:支持语音交互、状态显示与智能控制,契合现代用户对高端体验的追求;快速迭代:兼容主流芯片架构,支持远程更新与硬件扩展,助力产品持续迭代。目前,WTVxxx芯片已广泛应用于扫地机器
    广州唯创电子 2025-04-21 08:32 71浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦