
ARM
文章平均质量分 69
Phenixyf
这个作者很懒,什么都没留下…
展开
-
.text .data .bss .stack .heap 详解
.text 代码段:用来存放代码和常量(const 关键字定义的变量)。.data 数据段:用来存放有初始值的全局变量、全部静态变量(static 关键字定义的变量)。注意全部静态变量包括全局静态变量和局部静态变量,并且不论这些变量是否有初始值。即不管有没有初始值,也不管是全局变量还是定义在函数内的局部变量,只要是用 static 关键字定义的变量,都放在 .data 数据段内。.bss BSS段:用来存放没有初始值的全局变量。(没有初始值的局部变量好像也存在这里,网上验证帖子,待验证)。.st原创 2021-05-12 18:58:19 · 8263 阅读 · 2 评论 -
Burst传输
Burst传输实质就是只发送一次地址,很多传输如AHB总线,发送每个数据都要对应发送其地址。Burst传输就是提高了传输效率,在一次传输过程中,只发送一次地址。但burst传输有应用限制,不是所有传输类型都适合burst传输,一般busrt传输应用在下面三种场景:Flash应用类型 只发送一次地址,之后地址自动累加,直到所有数据发送完成。Cache应用类型 只发送一次地址,之后地址自动累加,累加到一定值后地址又自动回到初始地址。数据传输在一段地址范围内,循环传输。...原创 2020-05-27 17:51:20 · 8394 阅读 · 0 评论 -
ARMCC和GCC编译ARM代码的软浮点和硬浮点问题
本文介绍了ARM代码编译时的软浮点(soft-float)和硬浮点(hard-float)的编译以及链接实现时的不同。从VFP浮点单元的引入到软浮点(soft-float)和硬浮点(hard-float)的概念,然后是在GCC和ARMCC RVCT工具链下的具体编译参数。VFP (vector floating-point)从ARMv5开始,就有可选的Vector Floating Po...转载 2019-11-20 09:39:50 · 928 阅读 · 0 评论 -
ARM 之 Keil 项目/生成的各种文件类型(.AXF、.D、.crf、.exf)说明
Keil 是ARM推出(收购)的针对Cortex-M系列等低功耗芯片芯片的集成开发环境的品牌名称。目前 Keil 的最新版本为 µVision5。旧版本的Keil目前使用的已经非常少了,当前使用主要以µVision4和µVision5这两个版本为主。针对不同的芯片其名称有不同的叫法,具体参见https://blog.youkuaiyun.com/ZCShou优快云/article/details/81836...转载 2019-02-23 10:34:30 · 6690 阅读 · 0 评论 -
Flash-loader介绍 ----- 怎么重写MDK(KEIL)Flash烧写程序
MDK提供了Flash烧写程序接口,位于文件夹C:\Keil\ARM\Flash (不同的安装目录参考相对路径)。KEIL提供了各种的demo,打开_Template文件夹有个NewDevice的工程文件,打开里面可以看到程序的架构。分2部分,第一部分是Program Functions实现Flash的初始化,读,写等函数;第二部分是Device Description,是一个结构...转载 2019-02-21 18:28:47 · 4200 阅读 · 0 评论 -
C语言宏定义##连接符和#符的使用
C语言中##什么意思,比如说#define SHORT_REC_ADR_INIT(a) {ad_rec[a].slave_address = SPI_AD_DATA_ ## a ## _BASE;},这是什么意思?##在C/C++中具有连接字符串的作用。例如:执行完A ## B后变为AB(连接A和B并去掉空格)。下面通过具体实例来说明##的工作原理:假设程序中已经定义了这样一个带参数...转载 2019-01-15 15:37:40 · 699 阅读 · 0 评论 -
ARM 汇编指令集
ARM处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令6大指令。 一、 跳转指令 跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转 Ⅰ.使用专门的跳转指令; Ⅱ.直接向程序计数器PC写入跳转地址值,通过向程序计数器PC写入跳转地址值,可以...转载 2019-01-04 17:10:46 · 501 阅读 · 0 评论 -
C定义变量,申请内存,初始化值位置,外部RAM和Flash的使用 总结
Part1: 初始化的变量如下定义一个变量,定义时就初始化int a = 0x5A; 在单片机内是如下操作的。flash中没有 a, 只有 a 初始值 0x5A;因 a 是初始化了的变量,所以变量 a 会被放在flahs的.data区域; 注意flash的.data区域和linker script定义的.data区域的联系及区别。Linker script中可以...原创 2018-12-10 16:58:05 · 3031 阅读 · 0 评论 -
Internal vs. external RAM
Obviously, the constraints are much harder to satisfy in the default configuration where only internal RAM is available. Extreme care must be taken to avoid a stack-heap collision, both by making sure...转载 2018-12-06 09:15:05 · 594 阅读 · 0 评论 -
The Startup file
The startup file for Cortex-M0 cores can be written in either assembly language or C. Since the startup file "startup_stm32f0xx.s" that came with the STM32F0Discovery Firmware package was already writ...转载 2018-12-05 17:53:07 · 472 阅读 · 0 评论 -
ARM 之 镜像文件(Image)/可执行文件/ELF文件/对象文件 详解
一、对象文件格式(Object file format)ELF 文件标准里把系统中采用ELF 格式的文件归类为四种:可重定位文件,Relocatable File ,这类文件包含代码和数据,可用来连接成可执行文件或共享目标文件,静态链接库归为此类,对应于Linux 中的.o ;Windows 的 .obj.可执行文件,Executable File ,这类文件包含了可以直接执行的程序,它...转载 2019-02-23 10:36:20 · 4266 阅读 · 0 评论 -
Hex、bin、axf、elf格式文件小结
一、HEXHex文件,一般是指Intel标准的十六进制文件。Intelhex 文件常用来保存单片机或其他处理器的目标程序代码。它保存物理程序存储区中的目标代码映象。一般编程器均支持生成此种格式文件。如,KEIL下可通过配置相关选项来生成HEX目标文件。HEX文件由记录(RECORD)组成。在HEX文件里面,每一行代表一个记录。形如 :BBAAAATTHHHH...HHHHCC ...转载 2019-02-23 11:06:00 · 674 阅读 · 0 评论 -
armlink - Scatter file文件格式
Scatter file (分散加载描述文件)用于armlink的输入参数,他指定映像文件内部各区域的download与运行时位置。Armlink将会根据scatter file生成一些区域相关的符号,他们是全局的供用户建立运行时环境时使用。 (注意:当使用了scatter file 时将不会生成以下符号:ImageRWRWBase,ImageRWRWLimit,ImageR...转载 2019-02-23 18:11:02 · 965 阅读 · 0 评论 -
单片机的启动代码
对于熟悉电脑的伙伴们来说,BIOS(那个蓝色的界面)可能不会太陌生吧,这货就是电脑的启动代码。没有BIOS的电脑,那注定是一块板砖!BIOS主要是做一些开机前的准备工作,例如系统时间设定、启动顺序。。。扯远了!其实电脑本身就是从单片机而来,那么单片机也是有启动代码的,只是我们绝大部分情况不去关心它。启动代码究竟都干了些什么工作,为何需要它?想想你在c语言中用到了什么东西,而这些东西却是拿来...转载 2019-03-20 23:33:05 · 875 阅读 · 0 评论 -
内联函数:static inline 和 extern inline 的含义
内联函数:static inline 和 extern inline 的含义前置简短概述引入内联函数的目的是为了解决程序中函数调用的效率问题。 函数是一种更高级的抽象。它的引入使得编程者只关心函数的功能和使用方法,而不必关心函数功能的具体实现;函数的引入可以减少程序的目标代码,实现程序代码和数据的共享。但是,函数调用也会带来降低效率的问题,因为调用函数实际上将程序执行顺序转移到函数所...转载 2019-03-26 14:43:13 · 341 阅读 · 0 评论 -
程序的编译、链接和启动分析
本篇文章以STM32为硬件平台,使用GNU GCC作为开发工具,详细分析Compile 、Link 、Loader的过程以及Image(二进制程序)启动的详细分析。整个过程分析涉及到RW可读写段从Flash到Mem的Copy,BSS段的初始化,Stack和Heap的初始化,C库函数移植、利用Semihosting 实现基本的IO等内容。基本可以让你从更深刻的层面理解Source -> Com...转载 2019-04-08 12:48:52 · 1327 阅读 · 0 评论 -
程序的编译,装载与链接过程
程序编译四个过程:前言:经过扫描,语法分析,语义分析,源代码优化,代码生成和目标代码优化,编译器忙活了这么多个步骤以后,源代码终于可以被编译成了目标代码。但是这个目标代码有一个问题:index和array的地址还没有确定。如果我们要把目标代码使用汇编器编译成能够执行的指令,那么index和array的地址应该从哪里得到呢还有and so on?事实上,定义其他模块的全局变量和函数在最终运行...转载 2019-04-12 17:33:00 · 360 阅读 · 0 评论 -
译:GCC内联汇编入门
原文: GCC-Inline-Assembly-HOWTO1. 简介(Introduction.)1.1 Copyright and License.Copyright (C)2017 桂糊涂Copyright (C)2003 Sandeep S.This document is free; you can redistribute and/or modify this unde...转载 2019-05-09 11:28:23 · 820 阅读 · 0 评论 -
cortex M0 startup代码解析
;/******************************************************************************; * @file startup_Nano100Series.s; * @version V1.00; * $Revision: 3 $; * $Date: 14/01/14 4:17p $; * @brief ...转载 2019-07-17 16:05:06 · 1273 阅读 · 0 评论 -
ARM Cortex-M3的startup.s文件详解
以LM3S9B90为例。Startup.s文件是系统的启动文件,主要包括堆和栈的初始化配置、中断向量表的配置以及将程序引导到main()函数等。Startup.s主要完成三个工作:栈和堆的初始化、定位中断向量表、调用ResetHandler。a)堆和栈的初始化Startup.s中的代码如下图所示:1.程序分别对堆和栈进行了大小的规定以及空间的分配。StackEQ...转载 2019-07-17 16:09:55 · 2435 阅读 · 0 评论 -
JLINK与JTAG简单介绍
调试ARM,要遵循ARM的调试接口协议,JTAG就是其中的一种。当仿真时,IAR、KEIL、ADS等都有一个公共的调试接口,RDI就是其中的一种,那么我们如何完成RDI-->ARM调试协议(JTAG)的转换呢?有以下两种做法:1.在电脑上写一个服务程序,把IAR、KEIL和ADS中的RDI命令解析成相关的JTAG协议,然后通后一个物理转换接口(注意,这个转换只是电气 物理层上的转换,就像...转载 2018-11-28 10:25:06 · 2819 阅读 · 1 评论 -
JLINK、JTAG、ULINK和STLINK的区别介绍
## JTAGJTAG(Joint Test AcTIon Group;联合测试工作组)是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式...转载 2018-11-28 10:21:37 · 1366 阅读 · 0 评论 -
STM32F1学习-深入理解存储器(存储器映射以及bit-band)
1.存储器映射STM32F1的系统结构存储器映射STM32F1的存储器的映射存储器映射是指把芯片中或芯片外的FLASH,RAM,外设,BOOTBLOCK等进行统一编址。即用地址来表示对象。这个地址绝大多数是由厂家规定好的,用户只能用而不能改。用户只能在挂外部RAM或FLASH的情况下可进行自定义。从系统结构图中我们可以看出,所有内部设备都是AHB System Bu...转载 2018-08-23 11:14:49 · 3402 阅读 · 0 评论 -
STM32F1(Cortex M3内核)存储器映射
本文参考《CM3权威指南》第五章 存储器系统 《STM32_参考手册》2.4 启动配置 《STM32F103xCDE_数据手册》第四章 memory mapping Cortex m3内核规定的存储器映射如下图所示。就好像ARM公司打造了一个柜子,从上到下有这几个抽屉,它规定了每个抽屉放的东西的种类,具体放什么放多少它不管(只要不...转载 2018-08-23 11:13:43 · 2023 阅读 · 0 评论 -
RTOS介绍
转自:http://bbs.21ic.com/icview-738690-1-1.html转载 2018-01-24 16:55:45 · 1250 阅读 · 0 评论 -
STM32 GPIO使用
1. 将硬件环境设置为宏定义,方便硬件环境修改:设置包含三项:GPIO端口、GPIO引脚号和GPIO端口时钟。示例如下#define LED1_PIN GPIO_Pin_10#define LED1_GPIO_PORT GPIOH#define LED1_GPIO_CLK RCC_AHB1Periph_GPIOH#defi原创 2017-07-05 16:32:35 · 1191 阅读 · 0 评论 -
STM32库文件结构及CMSIS介绍
使用STM32库时,各库文件作用及关系:转载 2017-06-09 11:13:58 · 12311 阅读 · 3 评论 -
emWin使用资料收集(一) ----- emWin 2天速成实例教程008_IconView图标控件使用方法
备注:(1)打开工程目录下的"Exe\GUISimulationDebug.exe"即可看到效果。(2)看完教程000~005就基本会用emWin做项目,其他章节可以需要时再参考。(1)使用GUIBuilder V5.30创建如下页面并保存为C文件FramewinDLG.c,然后添加到脱机模拟仿真平台CodeBlocks的emwin工程:转载 2017-06-29 10:31:35 · 1720 阅读 · 0 评论 -
emWin使用资料收集(二) ----- 使用emWin和BmpCvt工具显示位图
Segger为emWin提供了BMP转换工具,可以直接生成C流文件。先准备一张BMP图片,大小不要超过屏幕的大小,我是在VS里面使用的模拟器,屏幕的大小设置为800*480。 打开BmpCvt这个软件,然后File--Open,打开Bmp文件Image--Convert to RGB。这里可以根据需要设置成其它File--Save as--"C" Strea转载 2017-06-29 15:54:20 · 3653 阅读 · 0 评论 -
__I、 __O 、__IO是什么意思?
嵌入式编程(以STM32为例)中的volatile,const意义及应用场景 __I、 __O 、__IO是什么意思?这是ST库里面的宏定义,定义如下:#define __I volatile const /*!#define __O volatile /*!#define转载 2013-09-30 17:08:58 · 1102 阅读 · 0 评论 -
ARM Linker的使用及功能
原文地址:ARM Linker的使用及功能作者:蒙人4252.1 关于ArmLinkArmLink可以:1. 把多个目标文件及库文件(在ARM或THUMB代码中)连接与为一个可执行的映像文件。2. 把多个目标文件部分地连接成为一个目标文件以作为下一步连接操作中的输入部分。3. 指定内存中代码和数据的存放位置。4. ...转载 2018-08-27 18:59:32 · 818 阅读 · 0 评论 -
RAM、SRAM、SDRAM、ROM、EPROM、EEPROM、Flash存储器区别
常见存储器概念:RAM、SRAM、SDRAM、ROM、EPROM、EEPROM、Flash存储器可以分为很多种类,其中根据掉电数据是否丢失可以分为RAM(随机存取存储器)和ROM(只读存储器),其中RAM的访问速度比较快,但掉电后数据会丢失,而ROM掉电后数据不会丢失。 在单片机中,RAM主要是做运行时数据存储器,FLASH主要是程序存储器,EEPROM主要是用以在程序运行保存一些需要掉电...转载 2018-08-23 15:42:00 · 2774 阅读 · 0 评论 -
RAM,SRAM,SDRAM工作原理(很长)
存储原理: 为了便于不同层次的读者都能基本的理解本文,所以我先来介绍一下很多用户都知道的东西。RAM主要的作用就是存储代码和数据供CPU在需要的时候调用。但是这些数据并不是像用袋子盛米那么简单,更像是 图书馆中用有格子的书架存放书籍一样,不但要放进去还要能够在需要的时候准确的调用出来,虽然都是书但是每本书是不同的。对于RAM等存储器来说也是一样的,虽然存储的都是代表0和1的代码,但是不同的组...转载 2018-08-23 15:48:08 · 5481 阅读 · 0 评论 -
名词解释:arm内存空间、arm地址空间与arm物理内存
看过了一些资料,感觉这三个名词容易混淆,以下是我自己的理解。arm与powerpc两种处理器跟x86不同,arm与powerpc一样,它们的外设I/O端口是统一编址的,即与物理内存等外设统一编址在4GB的地址空间中(32为处理器)。而x86是将内存单独编址在一个地址空间,外设I/O端口在另外的地址空间,要访问IO地址空间需要用专门的指令操作。因此,“arm内存空间”这种说法是有很大歧义的。...转载 2018-11-30 16:28:09 · 3917 阅读 · 0 评论 -
程序各个段text,data,bss,stack,heap
网上找了一堆资料学习一下,了解这些,有助于规化程序结构,优化代码;使用gcc编译出来的程序,用size可以查看程序结构和大小,如 1: #size hello 2: Text data bss dec hex filename 3: 778 200 4 982 3D6 hello所以一个可执行的程序文件,结构分三部分:.text 代码段,用...转载 2018-12-04 13:12:55 · 1382 阅读 · 0 评论 -
什么是回调函数? Callback
作者:no.body链接:https://www.zhihu.com/question/19801131/answer/27459821来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。我们绕点远路来回答这个问题。编程分为两类:系统编程(system programming)和应用编程(application programming)。所谓系统编程,简...转载 2018-11-23 10:35:25 · 187 阅读 · 0 评论 -
c语言中external,static关键字用法
static用法:在C中,static主要定义全局静态变量、定义局部静态变量、定义静态函数。1、定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点。a.在全局区分配内存。b.如果没有初始化,其默认值为0.c.该变量在本文件内从定义开始到文件结束可见。2、定义局部静态变量:在局部变量前面加上关键字static,其特点如下:...转载 2018-11-06 16:54:54 · 598 阅读 · 0 评论 -
ARM Study Summary ----- /*自己总结*/
1. APB和AHB APB: 外设总线。 在APB上所有传输都是作为32位来处理的; AHB: 处理器系统总线。 在AHB上支持各种传输大小。 2. ARM处理器可以将程序代码复制到内存中并从这里开始执行。 这个操作一般是和工具链相关的。 参考《ARM Cortex-M0与 Cortex-M0+权威指南》 P56 ...原创 2018-10-09 16:32:16 · 264 阅读 · 0 评论 -
C语言的内存分配问题 ------Text, Heap, Stack, Data, BSS介绍
上周的CCF/CSP认证成绩出来了,第四题用粗暴的Dijkstra的思想强行遍历,本来估计能拿个60分,结果爆0分,耿耿于怀。 我考试用的是C++。 #include<iostream> using namespace std; int main() { int dis[8000][8000]; //代...转载 2018-09-19 10:33:02 · 1038 阅读 · 0 评论 -
堆和栈的详细说明 --解决大数组定义时栈溢出的两种方法
1. 数据结构上:栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在 WINDOWS下,栈的大小是1M(也有的说是2M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。 堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系...转载 2018-09-19 10:22:56 · 1281 阅读 · 0 评论