mini2440 裸机编程 -led
又重新做回了嵌入式,想把以前学到的东西从头复习一下。首先从裸机编程开始。
本系列使用的硬件环境是友善之臂的 mini2440,百问网的OpenJtag,所有程序在 linux gcc下编译, 具体硬件设置 软件环境搭建可见openjtag 文档:
编译器使用友善之臂的 4.4.3 。编译器配置 /etc/profile:
- PATH="$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin"
- export PATH
注意如果在 /etc/provile 里面修改了编译器 之后,只是 source /etc/profile 还是不够的,无法调整所用编译器路径。 正确做法是 先 source /etc/environment 然后再 source /etc/profile
第一个程序是 led 灯控制:
开头 汇编 文件:
- @******************************************************************************
- @ File£ºcrt0.S
- @ ¹¦ÄÜ£ºÍ¨¹ýËüתÈëC³ÌÐò
- @******************************************************************************
- #define PXT 0x12
- .text
- .global _start
- _start:
- ldr r0, =0x53000000 @ disable WATCHDOG
- mov r1, #0x0
- str r1, [r0] @
- ldr sp, =1024*4 @ stack pointer point to 4K
- bl main
- halt_loop:
- b halt_loop
主函数文件:
- #define GPBCON (*(volatile unsigned long *)0x56000010)
- #define GPBDAT (*(volatile unsigned long *)0x56000014)
- #define GPB5_out (1<<(5*2))
- #define GPB6_out (1<<(6*2))
- #define GPB7_out (1<<(7*2))
- #define GPB8_out (1<<(8*2))
- void wait(unsigned long dly)
- {
- for(; dly > 0; dly--);
- }
- int main(void)
- {
- unsigned long i = 0;
- GPBCON = GPB5_out|GPB6_out|GPB7_out|GPB8_out;
- while(1){
- wait(100000);
- GPBDAT = (1<< ( (i%4) + 5) );
- if(++i == 16)
- i = 0;
- }
- return 0;
- }
这个程序实现的功能是点亮led 灯,并实现流水效果。其中高电平熄灭 led 灯。
链接脚本把两个文件链接成一个独立的二进制文件: ( 使用开始的 4K 字节内存)
- SECTIONS {
- . = 0x00000000;
- .text : { *(.text) }
- .rodata ALIGN(4) : {*(.rodata)}
- .data ALIGN(4) : { *(.data) }
- .bss ALIGN(4) : { *(.bss) *(COMMON) }
- }
Makefile 脚本
- CFLAGS := -Wall -Wstrict-prototypes -g -fomit-frame-pointer -ffreestanding
- all : crt0.S leds.c
- arm-linux-gcc $(CFLAGS) -c -o crt0.o crt0.S
- arm-linux-gcc $(CFLAGS) -c -o leds.o leds.c
- arm-linux-ld -Tleds.lds crt0.o leds.o -o leds_elf
- arm-linux-objcopy -O binary -S leds_elf leds.bin
- arm-linux-objdump -D -m arm leds_elf > leds.dis
- clean:
- rm -f leds.dis leds.bin leds_elf *.o
首先运行脚本openocd.sh
- openocd -f /etc/openocd/interface/openjtag.cfg -f /etc/openocd/target/samsung_s3c2440.cfg
保持开启不退出状态。
然后另开启一个终端启动 elf 文件调试
- arm-linux-gdb -x gdb.init leds_elf
其中 gdb.init 文件内容:
- target remote 127.0.0.1:3333
- monitor halt
- monitor arm920t cp15 2 0
- monitor step
- load
此时就可以像调试普通程序一样调试这个裸机程序。
工程文件地址:
有一点特别需要注意:
汇编语言文件开头的位置标号必须是 _start: 如果是其它的则会导致 OpenJtag 无法识别,load 之后 用si指令执行导致 PC指针到未知的位置!!。
mini2440 裸机编程 -led相关推荐
- TQ210_裸机编程(一)——点亮LED灯
TQ210_裸机编程点亮LED灯 首先查看 TQ210 的底板原理图: 我们可以看到 两个 LED 分别接到 S5PV210 的 GPC0_3 和 GPC0_4 引脚. 这里用了 NPN 三极管,具有 ...
- BSP板机支持包、linux启动分析、ARM裸机编程
文章目录 一.BSP 二.驱动 驱动的基本要素 三.启动分析 1.uboot 2.uboot的作用 3.uboot相关命令 关键的内容: 1)bootargs,启动参数 2)启动命令 3)修改启动延时 ...
- 07 树莓派裸机编程,并在Windows MSYS2 QEMU模拟器中运行
作者 将狼才鲸 创建日期 2022-11-14 Gitee源码和工程地址:才鲸嵌入式 / 开源安防摄像机(嵌入式软件) CSDN文章地址:项目介绍:开源安防摄像机(嵌入式软件) 4)完整的环境安装步骤 ...
- 03 - 程序设计框架:裸机编程中应用层、中间层、驱动层划分
03-程序设计框架:裸机编程中应用层.中间层.驱动层划分 1.框架设计层次 <代码大全>第五章中,把程序设计分为四个层次: 软件系统,就是整个系统.整个程序 分解为子系统或包.比如我们可以 ...
- S5PV210(TQ210)裸机编程
本文更多的是教会大家如何学习. 4.1 汇编学习 4.1.1 基础知识 4.1.2 ARM模拟器 4.2 S5PV210启动流程 4.3 点亮一个LED 4.4 串口 ...
- S5PV210 | 裸机汇编LED流水灯实验
S5PV210 | 裸机汇编LED流水灯实验 开发板: 1.原理图 上图中,当按下POWER键后,VDD_5V和VDD_IO会产生5V和3.3V的电压,其中D26无须GPIO控制,为常亮状态,即我们所 ...
- TQ210裸机编程(3)——按键(查询法)
首先查看TQ210的底板原理图 这次编程只操作KEY1和KEY2,在TQ210核心板原理图中搜索XEINT0 可以看出KEY1和KEY2分别接在S5PV210的GPH0_0和GPH0_1引脚. 这次编 ...
- MINI2440裸机实验之SDRAM
MINI2440裸机实验之SDRAM 参考文章 <嵌入式应用开发完全指南> S3C2440 SDRAM SDRAM介绍 有关SDRAM的介绍以及S3C2440的SDRAM操作下面的文章介绍 ...
- MCU裸机编程的状态机框架--第一部分
MCU裸机编程的状态机框架--第一部分 1 状态机的概念 1.1 状态机的要素 1.2 状态迁移表 1.3 状态机思路实现一个时钟程序 1.4 状态机应用的注意事项 1.5 更复杂的状态机 2 单片机 ...
最新文章
- 网络工程师必须具备的素质
- Jenkins cve-2016-0792 漏洞复现 Xstream 反序列化漏洞
- WordPress制作插件中使用wp_enqueue_script('jquery')库不起作用解决方法
- tp5 if 如果有html判断,tp5条件判断,in,notin,between,if等
- SpringBoot_入门-HelloWorld细节-场景启动器(starter)
- 如何理解 Linux 中的 load averages
- click传值vue_对vue下点击事件传参和不传参的区别详解
- 2020年特斯拉是在中国获得补贴最多的电动汽车制造商
- 从零开始刷Leetcode——数组(189.217.219)
- 随机取 数据库中的 记录
- Linux elf文件分析
- php仿抖音短视频小程序开发,微信小程序中实现类似抖音短视频切换效果
- 教程详解|3D环物的360物体如何在后台上传?
- 深度学习——UMRL
- 【软件测试】资深测试聊一聊,测试架构师是怎么样的,做一名成功的测试工程师......
- java get方法_java get方法
- 加州欧文大学计算机申请,加州大学欧文分校信息与计算机科学(信息方向)理学硕士研究生申请要求及申请材料要求清单...
- python--表白小程序
- 关于雷蛇耳机麦克风突然失灵
- 如何停止Monkey测试
热门文章
- 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 在 PathClassLoader 和 BootClassLoader 之间插入 DexClassLoader )
- 【Android 逆向】加壳的 Android 应用启动流程 | 使用反射替换 LoadedApk 中的类加载器流程
- 【计算理论】图灵机 ( 非确定性图灵机 | 非确定性图灵机指令分析 | 计算过程 | 非确定性指令出现多个分支 | 非确定性图灵机转为计算树 | 计算树 )
- 【设计模式】装饰者模式 ( 概念 | 适用场景 | 优缺点 | 与继承对比 | 定义流程 | 运行机制 | 案例分析 )
- 【Java 网络编程】网络相关概念
- 2019-7-29 考试总结
- Educational Codeforces Round 66 (Rated for Div. 2)
- 如何使用Bootstrap4显示和隐藏元素
- 702:Crossing River (贪心)
- bzoj1513【POI2006】Tet-Tetris 3D