Cortex-M
zuixin369
这个作者很懒,什么都没留下…
展开
-
简单的Cortex-M栈检查
源文件CortexM_StackCheck.c代码如下:#include "CortexM_StackCheck.h"#include "myassert.h"extern void Stack_Mem(void);extern uint32 __get_MSP(void);#define CheckKey1 (0x12345678)#define CheckKey2 (0x8...原创 2019-01-01 23:39:11 · 967 阅读 · 0 评论 -
ARM Cortex-M底层技术(十一)KEIL MDK 分散加载示例3-单独函数/变量的指定加载
转载地址: 单独函数/变量的指定加载小编我一向主张在实战中学习,不主张直接去去学习规则&定义,太枯燥,在实际应用中去摸索,才会真正理解具体的技术细节,下面我们就通过实际的简单用例来搞清楚分散加载。将函数和变量放到特定的指定加载地址的方法: 通常,编译器通过单个源文件生成RO、RW和ZI节。要将单个函数或者数据固定放在特定的地址上,我们必须允许链接器单独处理这个函数或数据并...转载 2019-01-23 17:28:35 · 572 阅读 · 0 评论 -
ARM Cortex-M设备重启从特定位置运行
在项目开发中,有些设备在接收到相关指令或者遇到某种中断触发后需要重启。如果从程序入口处进行启动,会有一段比较长的时间进行初始化工作,相当浪费时间。重启的位置可以从初始化后的特定位置重新运行,这就需要把当前的程序计数器PC及堆栈SP指针进行备份。下面的程序不涉及到进程堆栈,备份的断点位置是在线程模式下。首先需要声明两个变量:// Global Variables to track test...原创 2019-01-28 23:50:16 · 752 阅读 · 1 评论 -
ARM Cortex-M底层技术(五)编译器编译内核原理以及其应用的简单介绍
转载地址: 编译器编译内核原理以及其应用上篇文档简要介绍了一下编译器的编译内核,当然介绍的很简单,没有深入进去,俗话说不深入怎么High,所以这里我们深入进去搞一下,看看里面都有些什么有用的东东。这里以市面上用的最多的Keil MDK为例,我们来研究下。1、先上一张老图,然后我们仔细看下这个器、那个器的都是干啥的:上一篇文章的图片,上一篇文章也简要介绍了下,但你可能会问,这...转载 2019-01-17 09:23:27 · 472 阅读 · 0 评论 -
ARM Cortex-M:结构体 vs 分散变量
以下运行环境为Cortex-M4内核,编译环境为Keil MDK并且优化级别为-O2。静态变量使用结构体表示的代码无论在space上还是speed上都要优于分散变量,应当尽量使用结构体。对于局部变量采用结构体还是分散变量并没有什么区别。结构体创建一段测试代码,定义一个结构体test_t,包含4个成员变量,函数func给结构体的4个成员变量赋值。struct test_t{...原创 2019-02-01 15:34:00 · 339 阅读 · 0 评论 -
ARM Cortex-M底层技术(十三)手把手教你写分散加载
转载地址: 手把手教你写分散加载还记得之前教大家写的启动代码吗?木看过滴,出门左转,第四篇【编写自己的启动代码】,当然仅仅能编写自己的启动代码怎么够,说了那么多分散加载的东东,是时候检验一下我们的水平了,合上书,来出题考试了~【自己编写分散加载】。来司机们,将装B进行到底~首先,看看我们之前第四篇文章里面的简易版分散加载:如下,之前按着没讲,前面罗里吧嗦的扯了辣么多分散加载,...转载 2019-01-25 23:30:46 · 770 阅读 · 0 评论 -
ARM Cortex-M底层技术(四)编写自己的启动代码
转载地址: ARM Cortex-M底层技术(四)编写自己的启动代码上一篇扯了一些关于启动代码的应用方面的内容,列举了4种我自己遇到过的常见的启动代码应用,当然实际的应用肯定不止上一篇文章中提到的那几种,关键是大家懂了原理后根据实际的需求添加自己的应用,这个才是关键。这一篇文章主要分享下如何编写自己的启动代码,你可能会说这种脱了裤子放屁的事情没必要的,CMSIS规范了标准的启动代码模板,...转载 2019-01-09 23:48:06 · 916 阅读 · 0 评论 -
ARM Cortex-M底层技术(一)ARM Cortex-M系列微控制器概况
曾经也想对ARM Cortex-M做一些总结,在网上闲逛时,突然发现有位博主写的很不错,借此转载。转载网址: ARM Cortex-M底层技术(一)ARM Cortex-M系列微控制器概况写在前面的话:近些年来ARM Cortex-M阵营各厂商(ST、NXP、ATMEL、Freescale……)发布新产品的节奏越来越快,以及微控制器应用普及程度的加深,越来越多的开发者把更多精力投注在...转载 2019-01-09 17:45:05 · 935 阅读 · 0 评论 -
ARM Cortex-M底层技术(三)启动代码的使用
转载网址: ARM Cortex-M底层技术(三)启动代码的使用上一篇扯了一些关于启动代码的原理,了解了原理不去使用意义就没有那么大了,了解了启动代码不是终极目的,我们的目的是深入理解Cortex-M系列MCU的底层原理,并应用到实际的产品中,加速开发,提升产品稳定性;下面就小编我的实际使用经历来看一下,启动代码的具体应用。启动代码的本质是在程序进入用户代码(main函数)之前初始化向量表...转载 2019-01-09 19:23:22 · 426 阅读 · 0 评论 -
ARM Cortex-M底层技术(二)启动代码原理分析
转载网址:ARM Cortex-M底层技术(二)启动代码原理分析写在前面的话:近些年来ARM Cortex-M阵营各厂商(ST、NXP、ATMEL、Freescale……)发布新产品的节奏越来越快,以及微控制器应用普及程度的加深,越来越多的开发者把更多精力投注在应用层开发上,花在对底层技术上的时间越来越少。小编我希望借助我之前对底层的一些积累,可以帮到大家快速的建立对Cortex-M系列处...转载 2019-01-09 18:11:09 · 627 阅读 · 0 评论 -
ARM Cortex-M底层技术(十)KEIL MDK 分散加载示例2-代码加载到片内SRAM中运行以及部分规则
转载地址: KEIL MDK 分散加载示例2-代码加载到片内SRAM中运行&部分规则小编我一向主张在实战中学习,不主张直接去去学习规则&定义,太枯燥,在实际应用中去摸索,才会真正理解具体的技术细节,下面我们就通过实际的简单用例来搞清楚分散加载。简单示例这个功能是非常有用的,这个小编我之前的文章提过,是一种可以显著增加程序运算速度的方法,所以比较常用,可以把核心算法相关...转载 2019-01-20 18:44:43 · 946 阅读 · 0 评论 -
ARM Cortex-M底层技术(九)KEIL MDK 分散加载示例1-更改程序运行基址
转载地址: KEIL MDK 分散加载示例1-更改程序运行基址小编我一向主张在实战中学习,不主张直接去去学习规则&定义,太枯燥,在实际应用中去摸索,才会真正理解具体的技术细节,下面我们就通过实际的简单用例来搞清楚分散加载。更改程序运行基址我们先来做一个最简单的示例,然后逐步深入。这里选择一颗简单一些的MCU,LPC824,一颗M0+作为示例(因为其比较简单,作为示例比较合...转载 2019-01-20 11:40:54 · 381 阅读 · 0 评论 -
ARM Cortex-M底层技术(八)KEIL MDK 分散加载-2-语法
转载地址: KEIL MDK 分散加载的结构-2-语法 语法、枯燥的、烦人的语法……,但是有些时候木有办法,我本来也不想写这些东西,但确实绕不过去,我认为把它当成一种工具比较合适,了解大概结构以及基本的语法,一些细节没必要记的那么清楚,遇到问题的时候知道去哪里查就好了,这部分东西来自Keil的帮助文档,帮助文档中内容更加丰富也更加复杂,我节选出了一部分,了解这些基本可以搞定绝大多数应用,...转载 2019-01-19 23:18:32 · 526 阅读 · 0 评论 -
ARM Cortex-M底层技术(七)KEIL MDK 分散加载-1-分散加载的结构
转载地址: KEIL MDK 分散加载的结构1、我们先来解剖一只麻雀很多人会说我做项目时没用过分散加载啊,可能有些人甚至都不知道它的存在。事实上,开发环境会默认生成一个分散加载文件(或者叫链接器描述文件),你使用的可能就是这个默认的分散加载文件,先来看一下Keil默认生成的分散加载文件,使用LPC54608随便找了一个示例代码用Keil生成了一个,如下图所示:这个分散加载是keil...转载 2019-01-19 22:39:56 · 746 阅读 · 0 评论 -
ARM Cortex-M底层技术(六)分散加载的简单介绍
转载地址: 分散加载原理的简单介绍分散加载我自己在最初学习这部分内容的时候在网上找吐血了都没找到很靠谱的深入的文章,基本看之前不懂,看完了就更不懂了,后来只能硬着头皮自己慢慢摸索,也花了很多功夫,这里跟大家系统的分享一下,小编我会分成几篇文章来讨论这部分内容,争取做到让各位看官老爷看过我的文章后能够了解其原理并应用到自己的项目中去。前面N篇文章总是提及的分散加载我们将在接下来的几篇文档里面把他...转载 2019-01-18 20:47:35 · 863 阅读 · 0 评论 -
ARM Cortex-M底层技术(十二)KEIL MDK 分散加载-堆栈与预处理器
转载地址: 分散加载-堆栈与预处理器在分散加载中处理堆栈:分散加载机制提供了一种方法,用于指定如何在映像中放置代码和静态分配数据。 应用程序的堆栈和堆是在 C 库初始化过程中设置的。 通过使用特别命名的ARM_LIB_HEAP、ARM_LIB_STACK 或 ARM_LIB_STACKHEAP 执行区,可以调整堆栈和堆的放置。 此外,如果不使用分散加载描述文件,则可以重新实现__use...转载 2019-01-23 20:00:17 · 708 阅读 · 0 评论 -
Cortex-M系列内核启动文件分析
启动文件简介启动文件由汇编编写,是系统上电复位后第一个执行的程序。主要做了以下工作:1、初始化堆栈指针SP=_initial_sp2、初始化PC 指针=Reset_Handler3、初始化中断向量表4、配置系统时钟5、调用C 库函数_main初始化用户堆栈,从而最终调用main 函数去到C 的世界启动文件使用的ARM 汇编指令汇总其中DCD 相当于C语言力的&...原创 2019-01-04 20:20:46 · 874 阅读 · 1 评论 -
ARM Cortex-M memcoy的效率
c语言示例1如下:void mem_cpy(void *Dst,const void *Src,unsigned int size){ unsigned int i; unsigned char *pDst = (unsigned char *)Dst; unsigned char *pSrc = (unsigned char *)Src; for(i=...原创 2019-03-02 22:46:22 · 289 阅读 · 0 评论