物联网|MDK使用方法及工具|探索cortex-M系列CPU的内核|ARM汇编语言|MDK注释显示中文|物联网开发系列课程之零基础玩转Cortex-M系列CPU-学习笔记(2)

如何获取更多的信息

1.如何使用帮助文档
2.如何使用及设置BOOK Window

MDK使用方法及其它一些工具介绍(3)

MDK5.13工程代码的调试演示

工程代码的基本构成

MDK5.13编译流程简介及编译后文件说明

如何获取更多的信息

★其它的一些工具

1代码查看和编辑

.UE
下载地址
.Source Insight:适合于代码量比较大的工程
下载Version 4.0.0126

2接口工具

.串口助手
主页:http://www.daxia.com/
下载sscom
.网口助手

3文件比较器

Beyond Compare
免费下载,支持30天标准/专业版功能试用!

4代码编译

gcc
IAR

课后作业

1请大家用MDK创建一个基于芯片STM32F407ZG的工程,并添加代码,进行编译,通过软仿真进行调试。
要求启动代码用课程讲解的第二种方法添加。
2请大家下载Source Insight,UE,串口助手以及文件比较器Beyond Compare

Lesson3:探索cortex-M系列CPU的内核

Cortex-M内核架构及指令集简述

在这里插入图片描述

Cortex-M三兄弟体系架构概述

cortex-M0 Cortex-M3 Cortex-M4 的体系架构图
在这里插入图片描述

Tip1:何谓哈佛架构

简单学习ARM汇编语言

1ARM汇编语言的基本语法
ARM Compiler armasm User Guide Version 5.06
标号 即指令地址
操作码接作数1,操作数2,–;注释。
2常用的汇编指令介绍及使用演示

数据传输指令

在这里插入图片描述

示例:startup_stm32f407xx.s

F:\IOT\PRJ\first_prj\RTE\Device\STM32F407ZGTx\startup_stm32f407xx.s
在import main后增加:MOV R0, #0X123 ;mov指令操作直接数0X123

        IMPORT  __main
				 MOV     R0, #0X123 ;mov指令操作直接数0X123

                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

先编译,编译通过

Build started: Project: first_prj
*** Using Compiler 'V6.19', folder: 'd:\Keil_v5\ARM\ARMCLANG\Bin'
Build target 'Simulator'
".\Objects\first_prj.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:00

再执行调试:
在这里插入图片描述

点击reset,执行复位,程序光标停在刚才修改的代码上:在这里插入图片描述

单步执行,0x123写入了寄存器:
在这里插入图片描述

内存访问指令

LDR/STR指令使用演示

删除刚才添加的MOV指令,新增加:
LDR R0, =NMI_Handler;通过标号NMI_Handler,将NMI_Handler写入R0
先编译,编译通过,再reset,执行复位,并单步执行:在这里插入图片描述

LDR后,跳转到0x08000217:
在这里插入图片描述
在这里插入图片描述

程序流控制指令(跳转指令)

在这里插入图片描述

BL指令的用法示例

LDR R0, =NMI_Handler;增加以下指令:
BLX R0
编译并单步执行,在这里插入图片描述

其他指令(可以看用户手册,在程序命令上光标位置按F1自动打开索引)

ARM汇编语言的后缀

在这里插入图片描述
在这里插入图片描述

Cortex-M架构CPU中汇编和C的混合编程

汇编代码中调用C函数

F:\IOT\PRJ\first_prj\RTE\Device\STM32F407ZGTx\startup_stm32f407xx.s为例:
示例代码:

        IMPORT  SystemInit
        IMPORT  __main
                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP

其中的:IMPORT SystemInit
在这里插入图片描述

引入该文件的源文件为:
F:\IOT\PRJ\first_prj\RTE\Device\STM32F407ZGTx\system_stm32f4xx.c
执行方式为:先导入 SystemInit,再将入口地址写入R0,最后再跳转到R0执行。
这里R0的值更新为0x080002C9。

继续单步执行,跳转到systeminit函数:
在这里插入图片描述

C代码中调用汇编函数

tip1:如何写一个汇编函数

C代码中直接加入汇编语句

·嵌入的汇编语句
.内联的汇编语句

Tips:MDK注释显示中文

MDK的编码设置为chinese2312(Edit>Configuration>Editor>Encoding)。

Cortex-M架构CPU内核的寄存器及处理器模式

Cortex-M架构CPU内核的存储系统

Cortex-M架构CPU内核的中断和异常处理

Cortex-M架构CPU的复位及复位时序书

Tips 常用的帮助文档列表

ARM Development Toolst
MDK-ARM Primer
uVision Users Guide
lntroducing the ARM Compiler Toolchain
ARM instruction Set Users Guide
Compiler User Guide
Assembler User Guide
Linker User Guide
Libraries and Floating Point Support Guide
Migration and Compatibility
Creating Static Software Libraries with armar
Using the fromelf Image Converter
Errors and Warnings Reference Guide
Debugger Adapter User’s Guides
Getting Assistance
Licensing Users Guide

猜你喜欢

转载自blog.csdn.net/Medlar_CN/article/details/130389732