完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
前言
这个问题如果是学生问,回答是肯定的(因为你们考试的打答案是:C语言总是从main函数开始执行) 但是当我初学汇编发现好像C语言执行的第一个函数是任意的 一、程序是怎么执行的? 环境:stm32103、KEIL5 二、使用步骤 1.引入库 首先从上电开始,CPU是先执行一段汇编(机器语言),设置程序要执行的堆栈大小,初始化中断向量表; C语言执行过程中要用到栈,所以设置好栈以后就可以跳转到C语言程序了 设置C语言的入口函数为my_main _ _Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors AREA |.text|, CODE, READONLY ; Reset handler Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT my_main IMPORT SystemInit LDR R0, =SystemInit BLX R0 LDR R0, =my_main BX R0 ENDP 2.C语言函数my_main实现 int my_main(void) { delay_init(); //ÑÓʱº¯Êý³õʼ»¯ LED_Init(); //³õʼ»¯ÓëLEDÁ¬½ÓµÄÓ²¼þ½Ó¿Ú while(1) { LED0=0; LED1=1; delay_ms(300); //ÑÓʱ300ms LED0=1; LED1=0; delay_ms(300); //ÑÓʱ300ms } } 3.编译链接通过 assembling startup_stm32f10x_hd.s... compiling misc.c... compiling stm32f10x_gpio.c... compiling stm32f10x_dbgmcu.c... compiling stm32f10x_rcc.c... compiling stm32f10x_usart.c... linking... Program Size: Code=1304 RO-data=304 RW-data=32 ZI-data=1736 FromELF: creating hex file... "..OBJLED.axf" - 0 Error(s), 0 Warning(s). Build Time Elapsed: 00:00:06 4.看一下执行情况 可以看到单步调试时候程序执行到155行后跳转到main()函数内 总结 所以C语言是不是一定从main开始,至少单片机不是,所以其他编译环境应该也可以修改入口函数 |
|
|
|
只有小组成员才能发言,加入小组>>
2545 浏览 0 评论
1142浏览 2评论
741浏览 1评论
495浏览 0评论
256浏览 0评论
417浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 13:33 , Processed in 1.170961 second(s), Total 48, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号