Code
汇编
.global _start /* 全局标号 */
/*
* 描述: _start函数,程序从此函数开始执行,此函数主要功能是设置C
* 运行环境。
*/
_start:
/* 进入SVC模式 */
mrs r0, cpsr /*CPSR的值读到r0中*/
bic r0, r0, #0x1f /* 将r0寄存器中的低5位清零,也就是cpsr的M0~M4 ~0 0000=0x1f */
orr r0, r0, #0x13 /* r0或上0x13,表示使用SVC模式 */
msr cpsr, r0 /* 将r0 的数据写入到cpsr中 */
ldr sp, =0X80200000 /* 设置栈指针 */
b main /* 跳转到main函数 */
main.c
#include "main.h"
/*使能I.MX6U所有外设时钟*/
void clk_enable(void)
{
CCM_CCGR0 = 0xffffffff;
CCM_CCGR1 = 0xffffffff;
CCM_CCGR2 = 0xffffffff;
CCM_CCGR3 = 0xffffffff;
CCM_CCGR4 = 0xffffffff;
CCM_CCGR5 = 0xffffffff;
CCM_CCGR6 = 0xffffffff;
}
/* 初始化LED对应的GPIO*/
void

这篇博客详细介绍了C语言在BSP(板级支持包)中实现LED驱动的过程,涉及汇编语言、main.c、main.h、Makefile和链接脚本等内容。通过Makefile的规则编译和链接.s或.c文件为.elf和.bin格式,并讨论了链接脚本中内存段的配置,如代码段(text)、只读数据段(rodata)、数据段(data)和bss段的对齐与初始化。此外,还提到了编译选项如-nostdlib和-O2的作用。
最低0.47元/天 解锁文章
788

被折叠的 条评论
为什么被折叠?



