嵌入式系统作业-32106200022
文章目录
- 嵌入式系统作业-32106200022
- 第一周
- 1. 嵌入式系统常用术语
- 1.1 与硬件相关的术语
- 1.2 与功能模块相关的术语
- 1.3 与通信相关的术语
- 2. 运行示例程序,并记录结果
- 2.1 编译、下载与运行第一个嵌入式程序
- 第二周
- 作业要求
- 1. 在第一行显示"广州大学"字样。
- 2. 写出main.s中94~101行语句的C语言描述。
- 2.1 原汇编代码
- 2.2 改写后C语言代码
- 3. 将求和结果、`sumresult`的地址用`printf`显示出来。
- 运行截图
- 第三周
- 编写示例程序:datax、datay、dataz三个数中,找出最大值并显示。
- 运行截图
2024.3.23:已更新第三周作业
第一周
1. 嵌入式系统常用术语
1.1 与硬件相关的术语
中文名 | 英文缩写 | 英文全称 |
---|---|---|
封装 | PKG | Packaging |
印刷电路板 | PCB | Printed Circuit Board |
模拟量 | AQ | Analog Quantity |
开关量 | SQ / DQ | Switch Quantity or Digital Quantity |
1.2 与功能模块相关的术语
中文名 | 英文缩写 | 英文全称 |
---|---|---|
通用输入/输出 | GPIO | General Purpose Input/Output |
模数转换 | ADC | Analog-to-Digital Converter |
数模转换 | DAC | Digital-to-Analog Converter |
脉冲宽度调制器 | PWM | Pulse Width Modulation |
看门狗 | WDT | Watchdog Timer |
液晶显示 | LCD | Liquid Crystal Display |
发光二极管 | LED | Light Emitted Diode |
键盘 | KBD | Keyboard |
1.3 与通信相关的术语
中文名 | 英文缩写 | 英文全称 |
---|---|---|
并行通信 | Parallel Comm. | Parallel Communication |
串行通信 | UART | Universal Asynchronous Receiver |
串行外设接口 | SPI | Serial Peripheral Interface |
集成电路互联总线 | I2C | Inter-Integrated Circuit |
通用串行总线 | USB | Universal Serial Bus |
控制器局域网 | CAN | Controller Area Network |
边界扫描测试协议 | BSTP | Boundary Scan Test Protocol |
串行线调试技术 | SWD | Serial Wire Debug |
2. 运行示例程序,并记录结果
2.1 编译、下载与运行第一个嵌入式程序
-
步骤一:硬件连线
-
步骤二:打开环境,导入工程
-
步骤三:编译工程
-
步骤四:连接GEC
- 步骤五:下载机器码
- 步骤六:观察运行结果
触摸温度传感器,可以看到黄灯会闪烁3次;
触摸"金葫芦"字样的触摸区,可以看到白灯闪烁3次.
- 步骤七: 通过串口观察运行情况
数据传输成功.
第二周
作业要求
打开04-Software/ch02/CH02-1-20220118
工程目录,
编译下载运行,理解并学习main.s
汇编源文件。
修改
main.s
源文件,增加以下内容:
· 1、在第一行显示"广州大学"字样。
· 2、编写一个1+2+…+10的程序,将求和结果存入名为
"sumresult"
的内存单元中,并将求和结果、sumresult
的地址用printf
显示出来。
注:建议在源程序中"main_loop:"
语句之前的地方增加,结束时用"bl."
停住。
printf
的格式详见05UserBoard/printf.h
文件。
1. 在第一行显示"广州大学"字样。
school_name:
.ascii "-------------------------广州大学-------------------------\n\0"
//打印文本
ldr r0,=school_name
bl printf
2. 写出main.s中94~101行语句的C语言描述。
2.1 原汇编代码
main_loop: //主循环标签(开头)
//(2.1)主循环次数变量mMainLoopCount+1
ldr r2,=mMainLoopCount //r2←mMainLoopCount的地址
ldr r1, [r2]
add r1,#1
str r1,[r2]
//(2.2)未达到主循环次数设定值,继续循环
ldr r2,=MainLoopNUM
cmp r1,r2
blO main_loop //未达到,继续循环
//(2.3)达到主循环次数设定值,执行下列语句,进行灯的亮暗处理
2.2 改写后C语言代码
for(;;){
r2 = &mMainLoopCount;
*r1 = *r2;
(*r1)++;
*r2 = *r1;
r2 = &MainLoopNUM;
if(*r1 == *r2) break;
}
3. 将求和结果、sumresult
的地址用printf
显示出来。
sumResult:
.word 0 //定义结果保存变量
sum_loop:
add r2, r2, r1 //r2 += r1
add r1,r1, #1 //r1++
cmp r1, #11 //比较r1是否等于11
bne sum_loop //如果不是,继续循环
mov r1, #sumResult
str r2,[r1] //将结果存入sumresult变量
//显示求和结果
ldr r0,=data_format1
ldr r1,=#sumResult //加载求和结果到r1
bl printf //调用打印整数的函数,参数是r0,r1
//显示sumresult的地址
mov r0, #sumResult //将sumResult的地址加载到r0
bl printf //调用打印地址的函数,参数是r0
bl . //在此打桩(.表示当前地址)
运行截图
可以看到地址及结果为37(16进制),十进制为55。
第三周
编写示例程序:datax、datay、dataz三个数中,找出最大值并显示。
//给三个寄存器赋初值
ldr r0,=datax
ldr r1, [r0]
ldr r0,=datay
ldr r2, [r0]
ldr r0,=dataz
ldr r3, [r0]
cmp r1,r2 //比较r1, r2
bgt one_three //如果r1>r2,比较r1、r3
mov r1,r2 //否则令r1=r2
one_three:
cmp r1,r3 //比较r1, r3
bgt show_result //如果r1>r3,r1即为最大值,打印最大值
mov r1,r3 否则令r1=r3
ldr r0,=data_format
bl printf
show_result:
ldr r0,=data_format
bl printf