ARM编译器C库启动与初始化详析:AN241应用指南

需积分: 10 1 下载量 46 浏览量 更新于2024-06-27 收藏 309KB PDF 举报
本文档是ARM官方发布的应用笔记241,名为《ARM Compiler C Library Startup and Initialization》(ARMDAI0241B)。这份文档详细讲解了在ARM处理器上使用ARM编译器进行程序开发时,从系统启动进入主函数(__main())之前,C库的初始化过程以及启动代码的工作原理。它涵盖了ARM编译器工具链v4.1 build 561及后续版本的通用指导,特别强调了在不同ARM处理器平台上的初始化步骤。 在系统启动阶段,关键步骤包括但不限于: 1. **硬件初始化**:文档首先概述了处理器的启动序列,这涉及复位处理、内存映射、时钟配置等,确保硬件环境处于可编程状态。 2. **中断向量表设置**:ARM编译器会负责设置中断向量表,这是处理硬件中断的关键结构,用于将中断源映射到相应的处理函数。 3. **堆栈配置**:在C库的初始化过程中,会为程序堆栈分配和初始化空间,这是函数调用和局部变量存储的基础。 4. **C runtime library 初始化**:这涉及到内存管理、输入/输出流(stdio)、数学运算库(math.h)以及其他标准库函数的初始化,这些将在后续的程序执行中被调用。 5. **内存检查与错误处理**:文档可能会提到如何在初始化期间进行内存检查,确保可用内存的安全性和完整性,防止未定义行为。 6. **安全性和异常处理**:C库会设置基础的异常处理机制,如异常返回地址保存、处理器模式切换等,以保障程序在遇到异常情况时能正确响应。 7. **引导加载程序与链接器交互**:在某些情况下,文档可能讨论引导加载程序如何引导应用程序到__main()函数,包括链接器的引导阶段和代码段的定位。 8. **版本兼容性和更新**:随着ARM编译器的更新,文档可能会包含针对新特性或修复的说明,确保开发者能了解并利用这些改进。 此文档对嵌入式系统开发者尤其有价值,因为它提供了深入理解如何利用ARM编译器创建稳定、高效和可移植的C程序的基础。通过阅读这份文档,开发者可以掌握在不同架构上的C库启动和初始化流程,从而更好地编写和调试自己的应用程序。

d:\stm32dev\stm32cubeide_1.12.1\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.10.3-2021.10.win32_1.0.200.202301161003\tools\arm-none-eabi\bin\ld.exe: ./Core/Src/main.o: in function `main': main.c:(.text.startup.main+0x16): undefined reference to `TMC2660_DirectSet' d:\stm32dev\stm32cubeide_1.12.1\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.10.3-2021.10.win32_1.0.200.202301161003\tools\arm-none-eabi\bin\ld.exe: main.c:(.text.startup.main+0x1e): undefined reference to `TMC2660Enable' d:\stm32dev\stm32cubeide_1.12.1\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.10.3-2021.10.win32_1.0.200.202301161003\tools\arm-none-eabi\bin\ld.exe: main.c:(.text.startup.main+0x26): undefined reference to `TMC2660_MicrostepSet' d:\stm32dev\stm32cubeide_1.12.1\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.10.3-2021.10.win32_1.0.200.202301161003\tools\arm-none-eabi\bin\ld.exe: main.c:(.text.startup.main+0x2e): undefined reference to `TMC2660_CurrentScaleSet' d:\stm32dev\stm32cubeide_1.12.1\stm32cubeide\plugins\com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.10.3-2021.10.win32_1.0.200.202301161003\tools\arm-none-eabi\bin\ld.exe: main.c:(.text.startup.main+0x34): undefined reference to `TMC2660_SPIMoveStep' collect2.exe: error: ld returned 1 exit status make: *** [makefile:64: TMC2660_tset.elf] Error 1 "make -j32 all" terminated with exit code 2. Build might be incomplete.

2023-07-13 上传