![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
单片机
文章平均质量分 94
wenzi嵌入式软件
这个作者很懒,什么都没留下…
展开
-
STM32 在 keil 环境下如何使用 cm_backtrace进行错误追踪
引言我们在平常使用STM32单片机的时候,往往会碰到程序跑飞的情况,出现hard_fulat等错误,而我们在定位错误的时候,采用的方法往往是连上仿真器,一步一步单步调试,定位到具体的错误代码,再去猜测、排除、推敲错误原因,这样一个过程很是痛苦,而且在实际情况中,很多产品真机调试时必须断开仿真器或者说,问题确实存在,但是极难出现,所以在基于这样一个问题背景下,RTT 的大佬armink开发了一个基于 ARM Cortex-M系列的 MCU错误追踪库,用于帮助开发者解决上述问题。CmBacktrace 的作原创 2021-03-06 13:40:06 · 1975 阅读 · 1 评论 -
裸机内存管理解析
概述在计算机系统中,变量、中间数据一般存放在系统存储空间中,只有实际使用的时候才将他们从存储空间调入到中央处理器内部进行计算。通常存储空间分为两类:内部存储空间和外部存储空间。对于电脑来讲,内部存储空间就是电脑的内存,外部存储空间就是电脑的硬盘。而对于单片机来讲,内部存储就是 RAM ,随机存储器。外部存储可以理解为 flash ,掉电不丢失。该篇文章的主题,内存管理,主要讨论的是关于 RAM 的管理。堆、栈和静态区针对于 Cortex M3 内核的单片机的详细内存分配可以参照笔者的这篇文章 STM3原创 2020-07-12 17:29:47 · 1128 阅读 · 1 评论 -
MCU 是如何从上电复位运行到 main 函数的?
前言在笔者的上一篇文章中《中断服务子程序是如何被执行的》,详细阐述了中断响应以及执行的整个过程,其中涉及到关于中断向量表的相关知识,本篇文章再次以中断向量表为出发点阐述上电复位的整个过程。复位的相关概念复位就类似于我们的个人 PC 重启一样,又比 PC 的重启要简单一些。引起复位的原因也是多种多样,笔者在这里大致列出以下几种:上电复位,也就是我们给我们的 MCU 通电后,其实也是一次复位的过程。外部产生的手动复位信号,这个也比较常见,我们在平时学习所使用的开发板中就存在一个复位的按键,来实现手动原创 2020-05-30 09:00:58 · 2870 阅读 · 1 评论 -
中断服务子程序是如何被执行的 ?
前言笔者在 《程序是如何在 CPU 中运行的(二)》中从 PC 指针寄存器的角度分析了一级函数调用和二级函数调用执行的过程,那么中断服务子程序又是如何被执行的呢?两者的相同点和不同点是什么呢?该篇文章笔者将详细地阐述这个概念。中断的概念当 CPU 正在处理某件事情的时候,外部发生的某一事件请求 CPU 迅速去处理,于是,CPU 暂时中止当前的工作,转去处理所发生的事件。中断服务处理完该事件以后,再回到原来被中止的地方,继续原来的工作,这样的过程称之为中断,示意图如下:中断响应及处理过程回顾函数调原创 2020-05-25 00:07:18 · 8160 阅读 · 4 评论 -
程序是如何在 CPU 中运行的(三)
前言在之前的两篇文章中,在 程序是如何在 CPU 中运行的(一)中讲述了一条一条指令和数据是如何在 CPU 中被运行的,在 程序是如何在 CPU 中运行的 (二)中以 PC 寄存器为中心,从汇编语言的角度阐述了程序是如何在 CPU 中有序执行的,该篇文章讲述流水线机制在 CPU 中的应用。相关概念在进入流水线的讲解之前,有必要知道两个概念,一个是指令周期,一个是时钟周期。指令周期:指令周期的意思从其名称就能看出来,就是运行一条指令的时间,笔者在该系列文章的第一篇中说到一条指令的运行能够大致分为三个原创 2020-05-19 11:28:57 · 527 阅读 · 0 评论 -
程序是如何在 CPU 中运行的(二)
前言在上一篇文章中《程序是如何在 CPU 中运行的(一)》笔者讲述了程序中一条一条指令以及一条一条数据是如何在 CPU 中运行的,在本文笔者将以 ARM Cortex M3 的内核为背景分析指令是如何有序的执行。寄存器组介绍为了更好地介绍指令是如何在 ARM Cortex M3 内核中运行的,在这里先介绍一下 ARM Cortex M3 的寄存器组,引用 ARM Cortex M3 权威指南的一张图,图片如下:如上图所示,寄存器组主要包含四种类型的寄存器,分别是:通用寄存器:用于数据操作原创 2020-05-12 10:47:46 · 982 阅读 · 1 评论 -
程序是如何在 CPU 中运行的(一)
CPU 和 MCU 的区别对于嵌入式开发来讲,我们在日常中接触到概念都是 MCU ,MCU 和 CPU 的区别也就在于 MCU 集成了片上外围器件,CPU 不带外围器件,一个简单的例子就是 MCU 在芯片内集成了 Flash 和 RAM 用来存储程序和数据,对应的在我们个人 PC 的体现就是硬盘和内存条,因此两者的区别只是在于外围器件的集成与否,最本质的工作原理两者是互通的。CPU 的组成部分...原创 2020-05-07 22:47:20 · 2344 阅读 · 1 评论 -
STM32 内存分配解析及变量的存储位置
内存映射在一些桌面程序中,整个内存映射是通过虚拟内存来进行管理的,使用一种称为内存管理单元(MMU)的硬件结构来将程序的内存映射到物理RAM。然后在对于RAM紧缺的嵌入式系统中,是缺少MMU内存管理单元的。因此在一些嵌入式系统中,比如常用的STM32来讲,内存映射被划分为闪存段(也被称为Flash,用于存储代码和只读数据)和RAM段,用于存储读写数据。STM32 的 Flash 和 RAM 地...原创 2020-04-09 00:41:54 · 8313 阅读 · 7 评论