小成的嵌入式系统作业2

1、打开04-Software/ch02/CH02-1-20220118工程目录编译下载运行,理解并学习main.s汇编源文件,并写出main.s中94-101行语句的c语言描述

按照作业1的方式导入工程、编译工程

理解学习main.s汇编源文件

这段代码演示了如何在嵌入式系统中调用GPIO构件控制小灯闪烁,并利用printf输出提示信息。其主要分为几个部分:数据段定义代码段定义主函数主循环

数据段定义(.data

  • 定义数据存储data段开始,实际数据存储在RAM中
  • 在RAM中定义了一系列字符串和变量,包括用于输出的字符串(hello_information、light_show1、light_show2和light_show3)、格式字符串(data_format和data_format1)以及一些状态变量(mMainLoopCount、mFlag和mLightCount)。

代码段定义(.text

  • 定义代码存储text段开始,实际代码存储在Flash中
  • 使用.thumb指令集,并对函数和指令进行了适当的对齐。

主函数(main

  • 初始化部分:禁用中断、初始化GPIO和UART用于控制LED和串口通信、使能中断。
  • 显示初始化信息:使用printf函数输出hello_information定义的字符串。

主循环(main_loop

  • 控制程序执行一个循环操作,直到循环次数达到预设的值。
  • 测试代码部分:显示机器码存储方式;根据mFlag变量的值('L'或'A'),程序会切换LED的状态(亮或暗),并更新mLightCount变量来记录LED闪烁的次数。

写出main.s中94-101行语句的c语言描述

c语言描述: 

#include <stdio.h>

int main()
{
    int MainLoopCount = 1; // 初始化MainLoopCount=1
    const int MainLoopNUM = 6122338; // 将MainLoopNUM声明为常量,值为6122338

    // 当MainLoopCount小于MainLoopNUM时,继续循环
    while (MainLoopCount < MainLoopNUM)
    {
        MainLoopCount++; // 在循环体中递增MainLoopCount
    }

    // 循环结束后,输出MainLoopCount的值
    printf("MainLoopCount=%d\n", MainLoopCount);

    return 0; 
}


小插曲 :准备开始做本次作业的第二道题时,突然就显示找不到设备了(如下图),微控制器的小灯也不亮了,之前一直把微控制器连着电脑运行也没啥问题。

 

一开始尝试按微控制器红圈圈出来的按键(复位键),但按了几下发现没啥改变,便以为是电脑有问题。问了老师这种情况,老师让我拿舍友的微控制器连接电脑试试,结果发现可以正常运行。于是又回过头来捣鼓微控制器,不死心又按了好多次微控制器的复位键,突然小灯就亮起来了,就可以了。跟老师说恢复了之后,老师告诉我复位键是需要按6下复位,属于是歪打正着了哈哈哈哈


2、修改main.s源文件,增加以下内容

1、在第一行显示“广州大学”字样。

2、编写一个1+2+..+10的程序,将求和结果存入名为“sumresult”的内存单元中,并将求和结果、sumresult的地址用printf显示出来。

①数据段定义(.data)

  • 定义了用于输出的字符串school,用于输出“广州大学”;
  • 定义了格式字符串data_format和address_format,分别用于显示求和结果以及地址。由于%d用于打印整数值,%p用于打印指针的内存地址,因此在显示求和结果时需用到%d,显示地址时需用到%p;
  • 定义了变量sumresult,用于存储求和结果。

②代码段定义(.text)

③主函数(main)

  • school定义的字符串,用r3存储求和结果并初始化求和结果为0,用r2存储需要求和的数并初始化为1

④主循环(main_loop)

  • 因为r2用于存储需要求和的数,因此可以根据r2的大小来判断循环是否继续。本题需要累加1到10,因此可以通过利用r2与值11进行比较,进而判断是否继续循环。

结果:

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值