2024年3月24日发(作者:)
Gcc 环境下stm32开发笔记
最近在移植公司的系统到stm32中,发现该系统使用的是gcc 开发的,可是一
般情况下stm32都是在集成环境下开发的,这时候就有很多以前集成开发环境做的事
情需要我们自己编写makefile ,链接器脚本和启动代码。
由于公司的启动代码部分是采用C语言编写的,但是我不喜欢C的启动代码,
所以我查阅了相关资料,把keil里面自带的启动代码,经过转换,转化成在gcc 下可
以用的启动代码,本文中所有的代码经过编译,运行成功的,最后在C环境下点亮
LED等来显示效果,需要完成这些功能至少需要以下几个文件Start.s main.c
system_stm32f10x.c stm32f10x_rcc.c stm32f10x_gpio.c,以及st标准库的所有头文
件以防编译出错。
Gcc 开发最主要的要完成3个步骤,搭建起C语言的编程环境,其他的任何平
台都是一样的。这3个步骤分别是,编写链接脚本,编写Makefile ,编写启动代码,
这些完成了之后,以后的开发工作就都是一样的了。
闲话不说,首先我们把链接脚本贴上来。
/*宏定义处理器架构为arm*/
OUTPUT_ARCH(arm)
/*定义入口函数*/
ENTRY(Reset_Handler)
/*定义内存组织结构*/
MEMORY
{
}
/*定义代码段*/
SECTIONS
{
/*代码最开头部分是中断向量表*/
/*我用的芯片是stm32f103 内存32K Flash 512K*/
RAM(xrw) : ORIGIN = 0x20000000,LENGTH = 32K
FLASH(rx): ORIGIN = 0x08000000,LENGTH = 512K
. = ALIGN(4);
.text :
{
/*4字节对齐*/
KEEP(*(.isr_vector))
*(.text)
} > FLASH
. = ALIGN(4);
__etext = .; /*代码段结束 . 代表单前地址*/
/*定义数据段*/
.data : AT (__etext)
{
__data_start__ = .;
*(vtable)
*(.data*)
. = ALIGN(4);
PROVIDE (__preinit_array_start = .);
*(.preinit_array)
PROVIDE (__preinit_array_end = .);
. = ALIGN(4);
PROVIDE (__init_array_start = .);
*(SORT(.init_array.*))
*(.init_array)
PROVIDE (__init_array_end = .);
. = ALIGN(4);
PROVIDE (__fini_array_start = .);


发布评论