C语言,相对于汇编有更好的可读性,便于维护等优点。下面实验将使用C语言实现点亮LED灯。C语言与硬件是紧密连在一起的,结合芯片中的flash和sram,简单了解C语言。
步骤:
FLASH,就是存放.bin文件的地方。SRAM,用于存放程序的堆栈,全局变量。
MEMORY,用于定义存储器范围。
AT>rom,表示将对应的SECTION放置到rom中,即Flash中。
_data_start / _data_end,用于说明data段在flash中的位置,方便程序将data段从flash中复制到sram中。
_ram_data_start,表示data段将复制到sram中的什么位置。
ADDR(),表示获得SECTION的运行地址vma,当程序被下载到flash后,程序开始运行时首先要将data段移动到sram中0x20000400地址处,这样程序运行时才不会出错。
LOADADDR(),表示获得SECTION的加载地址lma。
SIZEOF(),用于求SECTION的大小
整个SECTIONS,可以看做是程序在flash中的布局,其中.bss不占用flash空间,它是由程序中开始运行时,在sram中开辟空间并初始化为0。
各个SECTION,如.vectors.text.rodata.data.bss,分别存放不同类型的数据。
本质就是C语言中的指针操作,volatile作用是确保本条指令不会因编译器的优化而省略。如代码“RCC_APB2ENR |= 0x00000010;”,表示向寄存器的第4位(从0位开始计数)写1。