
在MAIN程序运行时,启动和复位过程需要结合FreeRTOS进行操作。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
5.10 MAIN 标识符、运行时启动和复位机制:MAIN 是一种具有特殊意义的标识符。在程序设计中,必须保证存在且仅存在一个名为 main() 的函数。该函数在程序执行过程中是首个被调用的函数。然而,与 main() 函数相关的代码并非在复位后立即执行,而是会先执行额外的代码,即编译器提供的运行时启动代码。此代码负责将控制流程转移到 main() 函数。后续几节将详细阐述该代码的功能以及其控制方式。编译器会在 main() 函数的结尾插入特定的代码片段,这些代码会在函数执行完毕后(即当 main() 函数内的 return 语句被执行,或者程序执行到达 main() 函数的结束右大括号时)触发。这种特殊的代码会导致程序跳转到地址 0,这对于所有 8 位 PIC 器件而言,相当于一种软件复位操作。值得注意的是,软件复位后的寄存器状态可能与硬件复位后的状态有所不同。为了确保程序的稳定运行,建议在 main() 函数内部避免其自然结束。可以考虑在 main() 函数外部或其末尾添加一个不会终止的循环(例如 while(1)),从而使该函数的执行得以持续进行。例如:void main(void){ // 这里可以放置程序的主要逻辑 // 完成后,进入等待中断状态 while(1) continue;}5.10.1 运行时启动代码 C 程序通常需要对某些特定对象进行初始化设置,并且器件需要处于某种特定的状态才能开始执行其主函数 (main()) 。运行时启动代码正是负责完成这些任务的工作,特别是以下几个方面:• 初始化在定义时已经赋予值的全局变量• 清零未初始化的全局变量• 对寄存器或器件的状态进行常规设置。与传统的链接通用预编译程序的方法不同,MPLAB XC8 采用了更加高效的方式来生成运行时启动代码——根据用户的程序需求动态地确定所需的启动代码内容。第 4.4.2 节“启动和初始化”详细介绍了所使用的文件以及如何控制这一过程。后续几节将深入探讨运行时启动代码的具体运作原理。运行时启动代码会在 main() 函数之前被执行;但如果需要在复位后立即执行一些特殊的初始化操作,则应参考第 5.10.2 节 “上电功能”中介绍的上电功能的使用方法。下表列出了用于启动和上电过程中的关键汇编标号(见表 5-12)。表 5-12:重要的汇编标号标号 位置 reset_vec 复位向量单元处 (0x0)powerup 上电程序开始处 (如使用)start startup.as 中的运行时启动代码的开始处 start_initialization C 输出代码中的 C 初始化启动代码的开始处 DS50002053D_CN 第 204 页 © 2013-2014 Microchip Technology Inc.
全部评论 (0)


