飞思卡尔编程/Sources目录下的文件Start08.c
发表:2023-08-29 11:59:48 阅读:83

飞思卡尔编程/Sources目录下的文件Start08.c

Start08.O文件显得相对复杂一些,主要是因为里面包含了很多的条件编译指令、内嵌汇编指令及一些#pragma编译器设置指令。一般来说,在C语言中程序是从main()开始的,main()函数是程序的主函数,在main()里面完成很多的初始化工作,然后可以调用很多的其他子函数,是其他子函数表演的舞台。在应用C语言开发单片机程序时,一般要求main()函数里面包含一个死循环。在仿真调试界面里,复位后光标并不是指向main(),而是指向Start08.c文件中的一Startup(void)函数,该函数在main()函数运行之前启动,是为main()搭建运行环境的,它主要做了3件事情。

(1)初始化堆栈指针。

INrr—SP—FROM—STARTUP—DESC();在该函数上单击右键选择Go to macro declara—tion of×××,发现该堆栈指针初始化函数只是一个宏定义,对应两条汇编指令。

#define INIT—SP—FROM—STARTUP—DESC()——asm LDHX@——SEG—END—SSTACK;\一asm TXS;

其一SEG—END—SSTACK是一个编译器变量,由文件Project.prm中定义的RAM的起始地址加上STACKSIZE定义的大小决定的一个数值,该数值在调试界面复位后,从Assembly窗口中很容易看出来。

(2)初始化变量,可能需要从程序存储器中复制相关数据以初始化相关变量。

#ifndef——ONLY——INIT——SP

Init();

#endff

从以上程序来看,该变量初始化工作是可以被屏蔽的,如果希望启动函数一Startup(void)中仅仅初始化堆栈指针,而不希望进行烦琐的变量初始化工作,则可通过宏定义#define ONLY INIT SP在预编译中被屏蔽。如果屏蔽变量的初始化工作,则要求应用程序中不要使用初始化变量。

(3)调用main()函数使之执行。

#ifndef BANKE:D

一asm JMP main;/*木如果采用调用子程序方式.需要将返回地址放人堆栈,浪费2字节RAM空间冰*/

#else

一asm CALL main;

#endif

 

阅读更多请您关注:

飞思卡尔MC9S08QG8单片机引脚使能控制

ADC总的转换时间

C语言编程项目中自动生成的/Sources目录下的文件main.C

freescale代理