汇编+C点亮led-用uboot的go命令运行
来源:互联网 发布:sql拼接两个字段 编辑:程序博客网 时间:2024/05/16 18:27
main.c
#include "led.h"static void delay(){ unsigned int i = 0; for(i = 0; i < 0xffffff; i++);}int main(){ led_init(); while(1) { led1_on(); delay(); led1_off(); delay(); led2_on(); delay(); led2_off(); delay(); } return 0;}
led.c
#define GPIO_BASE 0x01C20800#define GPIO_PH_CFG2_BASE (GPIO_BASE + 0x104)#define GPIO_PH_DAT_BASE (GPIO_BASE + 0x10C)#define GPIO_PH_CON (*(volatile unsigned *)GPIO_PH_CFG2_BASE)#define GPIO_PH_DAT (*(volatile unsigned *)GPIO_PH_DAT_BASE)void led_init(){ /* clear PH21 */ GPIO_PH_CON &= ~(0x7 << 20); /* clear PH20 */ GPIO_PH_CON &= ~(0x7 << 16); /* set PH21 output */ GPIO_PH_CON |= (0x1 << 20); /* set PH20 output */ GPIO_PH_CON |= (0x1 << 16);}void led1_on(){ GPIO_PH_DAT |= (1 << 21);}void led1_off(){ GPIO_PH_DAT &= ~(1 << 21);}void led2_on(){ GPIO_PH_DAT |= (1 << 20);}void led2_off(){ GPIO_PH_DAT &= ~(1 << 20);}
led.h
#ifndef _LED_H_#define _LED_H_void led_init();void led1_on();void led1_off();void led2_on();void led2_off();#endif
start.S
.section .init.global _start_start: b resetreset: /* start main */ bl mainloop: b loop
led.lds
SECTIONS{ .text : {*(.init) *(.text)}}
Makefile
CC = arm-linux-gnueabihf-gccLD = arm-linux-gnueabihf-ldAS = arm-linux-gnueabihf-asOBJCP = arm-linux-gnueabihf-objcopyOBJ = main.o led.o start.oall: $(OBJ) $(LD) -T led.lds $(OBJ) -o led.elf $(OBJCP) -O binary -S led.elf led.binled.o: $(CC) -c led.cmain.o: $(CC) -c main.cstart.o: $(AS) start.S -o start.oclean: rm $(OBJ) led.elf led.bin
通过uboot下载并运行
1,在uboot中执行loadx等待下载(xmodem)
2,在minicom中选择编译好的led.bin文件,通过xmodem下载到uboot中
3,在uboot中执行 go 0x48000000,便可以看到Cubieboard2的两个led以流水灯方式亮起来了
这种方式的关键在于通过链接脚本指定了0地址处的第一条指令(即start.S中的第一条指令),然后通过bl main来调用C文件中的main函数。
另外,生成的led.elf也可以通过uboot中的指令bootelf来运行
0 0
- 汇编+C点亮led-用uboot的go命令运行
- 汇编+C点亮led-以替代uboot的方式执行
- 纯汇编点亮led-以替代uboot的方式执行
- 嵌入式学习-uboot-lesson9.2-C点亮LED
- Uboot中点亮LED灯
- ok210汇编点亮LED灯
- 点亮LED——汇编
- 嵌入式学习-uboot-lesson5-点亮LED
- 使用汇编代码点亮一个LED灯
- mini2440之汇编点亮一个led
- mini2440第一课《汇编点亮LED》
- 点亮LED C语言程序
- 一步步点亮LED3_从零开始手写汇编点亮LED
- 基于ARM 的led循环点亮C程序
- 7.点亮led的操作
- 蓝牙控制LED的点亮
- Arduino入门--led的点亮
- uboot学习笔记(1.2点亮LED灯)
- Android学习之四样式、主题、shape、回调
- Spinner控件学习
- zoj1986 Bridging Signals (dp,最长递增序列,LIS)
- 浅谈无缓存I/O操作和标准I/O文件操作区别
- 如何使用Struts 2防止表单重复提交?
- 汇编+C点亮led-用uboot的go命令运行
- HDU 5379(Mahjong tree-树形dp统计标号)
- leetcode Add Digits
- 南阳OJ106-背包问题(贪心算法)
- hdoj 1203 I NEED A OFFER! 【01背包】
- 有向图Tarjan
- 约瑟夫问题I
- C语言计算文件大小
- 开发汇总