KEIL启动与__main函数详解:消除USB通讯协议警告
需积分: 40 11 浏览量
更新于2024-08-09
收藏 361KB PDF 举报
"keil警告-usb的通讯协议 完整版"
在KEIL开发环境中,开发者可能会遇到关于USB通信协议的警告,同时涉及到的关键概念是`__main`函数及其相关配置。`__main`函数是C语言程序的入口点,通常由编译器自动生成,负责初始化运行环境。在KEIL中,`__main`的作用包括初始化全局变量、设置堆栈指针以及处理函数代码的加载位置。
1. `__main`主要作用
- 初始化全局变量:所有全局变量在程序启动时会被赋予默认值或指定的初始值。
- 函数代码拷贝:对于非RAM中的函数代码,需要将其从加载地址复制到执行地址,通常是RAM中的`.data`段。
- 堆栈指针初始化:设置程序运行时的堆栈空间。
2. KEIL启动流程
- 分散加载文件:在KEIL的工程配置中,分散加载文件(scatter loading file)定义了程序内存的布局。如果使用`__main`和微库(通过`OptionsforTarget` -> `Target` -> `Use MicroLIB`选项),必须确保`__main`和微库函数位于`rootregion`,通常是`ER_IROM1`区域。
- 启动文件:当程序上电或复位时,会从指定的地址加载SP和PC。启动文件(startup code)通常由汇编语言编写,负责设置初始的SP和PC,以及调用`__main`函数。
3. `__main`执行过程
- `__main`函数在启动文件执行后被调用,完成上述的初始化任务。
- 如果使用微库,编译器会导出一些特定的标号,供微库中的函数如`malloc`使用。
- 若不使用微库,而是标准的ARMC库,启动文件会提供不同的初始化逻辑。
4. `__main`实现
- 工程配置:在KEIL中,可以通过修改`OptionsforTarget`来选择是否使用微库。
- 函数实现:`__main`函数的具体实现取决于是否使用微库或标准库,以及工程的具体需求。
5. 注意事项
- 当用户自己实现`__main`函数时,虽然ENTRY关键字不再有实质作用,但为了消除KEIL的警告,可以在复位中断的上一行添加ENTRY。
- 分散加载文件中的配置应与实际的存储器布局相匹配,以避免加载和执行时出现问题。
理解这些概念和步骤对于解决KEIL中的USB通信协议警告至关重要,同时也有助于优化和调试嵌入式系统的启动过程。正确配置`__main`和启动文件可以确保程序正确初始化并有效地利用内存资源。
2011-12-05 上传
2008-07-03 上传
2010-03-27 上传
2023-06-24 上传
2023-11-20 上传
2023-05-15 上传
2023-08-16 上传
2023-08-24 上传
2023-07-28 上传
![](https://profile-avatar.csdnimg.cn/343c6d208342431dab16d78a9f6c8123_weixin_26705191.jpg!1)
张_伟_杰
- 粉丝: 61
- 资源: 3986
最新资源
- Hadoop生态系统与MapReduce详解
- MDS系列三相整流桥模块技术规格与特性
- MFC编程:指针与句柄获取全面解析
- LM06:多模4G高速数据模块,支持GSM至TD-LTE
- 使用Gradle与Nexus构建私有仓库
- JAVA编程规范指南:命名规则与文件样式
- EMC VNX5500 存储系统日常维护指南
- 大数据驱动的互联网用户体验深度管理策略
- 改进型Booth算法:32位浮点阵列乘法器的高速设计与算法比较
- H3CNE网络认证重点知识整理
- Linux环境下MongoDB的详细安装教程
- 压缩文法的等价变换与多余规则删除
- BRMS入门指南:JBOSS安装与基础操作详解
- Win7环境下Android开发环境配置全攻略
- SHT10 C语言程序与LCD1602显示实例及精度校准
- 反垃圾邮件技术:现状与前景