ARM体系结构之点亮LED灯(C语言篇)

要在裸机上运行C语言程序,我们需要在运行C语言程序之前设置栈底指针,因为C语言中的变量与函数调用都是基于堆栈的。

怎么设置栈底指针呢,一句话就可以了

ldr pc,=1024*4
至于为什么设置成4k,是因为的这块板子SRAM最大只有4K的地址空间。

当然,我们还需要做的一件事情是关闭看门狗,这个,我也不是特别清楚,应该照做就好了吧,反正挺简单的

ldr r0, =0x53000000
mov r1, #0
str r1, [r0]

所以程序需要做这几件事情

关闭看门狗

设置栈底指针

跳转到C语言的函数中运行(一般是main函数)

.text
.global _start
_start:
	@关闭看门狗
	ldr r0, =0x53000000
	mov r1, #0
	str r1, [r0]
	
	@设置栈底指针
	ldr sp, =4096
	
	@跳转到C语言中运行
	bl main
	
halt_hoop:
	b halt_hoop	


#define LEDCON (*(volatile unsigned long *)0x56000050)
#define LEDDAT (*(volatile unsigned long *)0x56000054)

#define E_LED1 (0x01 << 2*4)
#define E_LED2 (0x01 << 2*5)
#define E_LED3 (0x01 << 2*6)

#define ON_LED1 (0x1 << 4)
#define ON_LED2 (0x1 << 5)
#define ON_LED3 (0x1 << 6)

void allLedEnable()
{
	LEDCON |= (E_LED1 | E_LED2 | E_LED3);
}

void sleep()
{
	int i = 0x5555;
	for(; i ; i--);
}

int main()
{
	
	allLedEnable();
	while(1){
		sleep();
		LEDDAT &= ~ON_LED1;
		LEDDAT |= ON_LED2;
		LEDDAT |= ON_LED3;
		sleep();
		LEDDAT |= ON_LED1;
		LEDDAT &= ~ON_LED2;
		LEDDAT |= ON_LED3;
		sleep();
		LEDDAT |= ON_LED1;
		LEDDAT |= ON_LED2;
		LEDDAT &= ~ON_LED3;
	}
	
	return 0;
}

led_on.bin:led_on.c crt0.S
	arm-linux-gcc -g -c -o led_on.o led_on.c
	arm-linux-gcc -g -c -o crt.o crt0.S
	arm-linux-ld -Ttext 0x00000000 -g crt.o led_on.o -o led_on_elf
	arm-linux-objcopy -O binary -S led_on_elf led_on.bin
	arm-linux-objdump -S -m arm led_on_elf > led_on_elf.dis
	
clean:
	rm -f led_on.bin led_on_elf *.o *.bak
	

这个程序之前已经写过两遍了,可是今天写时,无论如何led灯都不亮,后来对着书一个一个查,就是少了个volatile关键字,坑爹啊.



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ARM体系结构书是一本介绍ARM(Advanced RISC Machine)处理器体系结构的书籍。ARM处理器是一种广泛应用于移动设备、嵌入式系统及其他领域的微处理器架构。这本书会深入解释ARM体系架构的各个方面,包括指令集架构(ISA)、寄存器设置、内存管理单元以及其他与ARM处理器相关的特性和功能。 这本书会从基础开始,首先介绍计算机体系结构的基本概念,然后引导读者深入了解ARM的设计理念和架构。读者将会学习到ARM的指令集,了解指令的编码方式、指令的执行过程以及各个指令的功能和用途。此外,这本书还会介绍ARM的寄存器设置,包括通用寄存器、特殊寄存器和程序状态寄存器,以及这些寄存器在ARM体系结构中的作用和用法。 另外,这本书还会详细讲解ARM的内存管理单元(MMU)的功能和原理,以及它在操作系统中的应用。MMU是ARM处理器中一个重要的组成部分,负责管理内存的地址转换、访问控制和缓存等功能。通过学习MMU的原理和应用,读者能够更好地理解ARM处理器与操作系统的协作和优化。 最后,这本书还会介绍一些与ARM处理器相关的高级特性和功能,如乱序执行(out-of-order execution)、指令和数据缓存、乘法累加器等。这些特性和功能对于实现高性能的ARM处理器至关重要。 总之,ARM体系结构书是一本帮助读者深入了解ARM处理器体系结构的重要参考书籍,对于软硬件开发人员、嵌入式系统工程师和计算机体系结构研究者来说都有很高的价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值