
ARM架构与编程
文章平均质量分 96
主要记录了本人在深入学习单片机内部机制以及相关汇编的学习过程
嵌入式JunG
生活中充满了嵌入式和鸡哥
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
异常与中断(下)
② 清除EXTI中断,如果不清除中断,当按下按键后松手会一直触发中断,而清除中断需要从根源开始,GPIO中没有相关寄存器,所以从EXTI开始清除。在这里主要做两件事:① 使能NVIC,让中断能够发送给CPU,而发送过来的中断为EXTI0,EXTI0对应异常向量表的第六项,将其设置为1即可;多个中断源汇聚到NVIC,NVIC的职责就是从多个中断源中取出优先级最高的中断,向CPU发出中断信号。多个中断源汇聚到NVIC,NVIC的职责就是从多个中断源中取出优先级最高的中断,向CPU发出中断信号。原创 2025-01-01 20:45:12 · 813 阅读 · 0 评论 -
异常与中断(中)
要想深入理解异常处理,需要写程序来验证。本节课程故意执行一条未定义的指令,让它触发异常。ARM Cortex-M3与Cortex-M4权威指南.pdfPM0056.pdf复制“E:\ARM\doc_and_source_for_mcu_mpu\STM32MF103\daima\relocate\01_uart_question”修改为“01_undefined”。原创 2025-01-01 20:44:55 · 928 阅读 · 0 评论 -
异常与中断(上)
编译程序时,我们会先设置好异常向量表,程序开始运行,当运行到CMP指令时发生中断,CPU终止BLEQ指令的运行,会先去处理中断(irq):CPU会切换进入irq模式(若发生异常则进入各类异常对应的模式),接着CPU去异常向量表中得到一条指令并去执行该指令(注意与M3/M4的区别:这里是指令,而M3/M4是函数地址),该指令会一条跳转指令,会跳转去执行某个函数,在函数中首先会保存现场,接着分辨中断源并去处理中断,最后是恢复现场。如果C函数要用到这些寄存器,就要把它们保存到栈里,在函数结束前在从栈中恢复它们。原创 2025-01-01 20:44:32 · 1095 阅读 · 0 评论 -
代码重定位详解
由图可见,g_char2指向ROM,且表现为只读,所以能被成功打印,而g_char1指向内存RAM,该区域是可读可写的,而我们对于内存未进行赋值,所以当访问到g_char1指向的地址时,就会打印乱码(该内存中的任意值)。为了研究该问题,我们写了一个string.c和string.h,里面是打印函数,我们将该文件包含进该工程中,查看g_char1和g_char2的地址。可以看见,我们在定义了g_char1和g_char2(定义为常量)后,分别打印时g_char1显示的是乱码,而g_char2显示正常。原创 2025-01-01 20:43:08 · 1089 阅读 · 0 评论 -
Makefile简明学习教程
比如:原创 2025-01-01 20:42:52 · 1864 阅读 · 0 评论 -
Keil中的gcc
C/C++源文件中,以“#”开头的命令被称为预处理命令,如包含命令“#include”、宏定义命令“#define”、条件编译命令“#if”、“#ifdef”等。预处理就是将要包含(include)的文件插入原文件中、将宏定义展开、根据条件编译命令选择要使用的代码,最后将这些东西输出到一个“.i”文件中等待进一步处理。链接就是将上步生成的OBJ文件和系统库的OBJ文件、库文件链接起来,最终生成了可以在特定平台运行的可执行文件。编译就是把C/C++代码(比如上述的“.i”文件)“翻译”成汇编代码。原创 2025-01-01 20:42:28 · 1896 阅读 · 0 评论 -
必备汇编编程知识
C为了方便人类方便使用,发明的高级语言,要转换为汇编。汇编为了解放人类的记忆,发明的“助记符”,不用去记各类机器码。最终要转换为机器码。机器码给CPU使用UART的全称是Universal Asynchronous Receiver and Transmitter,即异步发送和接收。打印调试信息;外接各种模块:GPS、蓝牙;串口因为结构简单、稳定可靠,广受欢迎。通过三根线即可,发送、接收、地线。TxD线把PC机要发送的信息发送给ARM开发板。最下面的地线统一参考地。原创 2025-01-01 20:42:16 · 740 阅读 · 0 评论 -
ARM架构
一开始,ARM公司发布两类指令集:① ARM指令集,这是32位的,每条指令占据32位,高效,但是太占空间② Thumb指令集,这是16位的,每条指令占据16位,节省空间要节省空间时用Thumb指令,要效率时用ARM指令。一个CPU既可以运行Thumb指令,也能运行ARM指令。怎么区分当前指令是Thumb还是ARM指令呢?程序状态寄存器中有一位,名为“T”,它等于1时表示当前运行的是Thumb指令。假设函数A是使用Thumb指令写的,函数B是使用ARM指令写的,怎么调用A/B?原创 2025-01-01 20:42:02 · 1124 阅读 · 0 评论 -
深入了解点灯程序
GPIO: General-purpose input/output,通用的输入输出口。原创 2024-10-24 00:00:00 · 923 阅读 · 2 评论 -
嵌入式处理器详解
主芯片内部有ROM,ROM程序协助从非XIP设备启动。以SD卡启动为例。而CPU只能运行XIP设备中的程序ROM程序做什么?显然:ROM需要把SD卡上的程序读到内存里(片内RAM或是片外的DDR)ROM程序要做的事情:a. 初始化硬件初始化时钟,提高CPU、外设速度初始化内存:DDR需要初始化才能使用初始化其他硬件,比如看门狗、SD卡等b. 从外设把程序复制到内存b.1 支持那么多的启动方式,SD卡、SPI FLASH、USB DISK,怎么选择?原创 2024-09-20 11:58:28 · 1434 阅读 · 1 评论