随笔分类 - 2. 软件相关
摘要:Frm: http://www.cnblogs.com/firege/p/5806134.html 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege 本章参考资料:MDK的帮助手册《
阅读全文
摘要:0. 数据类型说明 主要包括4类: 1. mdk 设置Scatter 文件 默认情况下,片内会有两大存储块IROM(只读存储器RO,用来存常量、代码等),IRAM(读写存储器RW,用来存变量,包括被默认初始化为0的变量),如下图 "Target"选项卡。 来看“Linker”选项卡,下面介绍操作:
阅读全文
摘要:C99介绍,参考这里:C89,C99: C数组&结构体&联合体快速初始化 MDK 设置: 只需添加 ”--c99"参数即可,如图:
阅读全文
摘要:7.1 About scatter-loading The scatter-loading mechanism enables you to specify the memory map of an image to the linker using a description in a text
阅读全文
摘要:6.4 Image$$ execution region symbols The linker generates Image$$ symbols for every execution region present in the image. The following table shows t
阅读全文
摘要:名词 Extensible Linking Format(ELF) 3.1 The structure of an ARM ELF image ARM ELF映像包含sections, regions, and segments,每个链接阶段都有不同的映像视图。 The structure of a
阅读全文
摘要:1. 背景 C89标准规定初始化语句的元素以固定顺序出现,该顺序即待初始化数组或结构体元素的定义顺序。 C99标准新增指定初始化(Designated Initializer),即可按照任意顺序对数组某些元素或结构体某些成员进行选择性初始化,只需指明它们所对应的数组下标或结构体成员名。GNU C将其
阅读全文
摘要:1、总开关 每个CPU有一个中断总开关。通过CPU中断控制寄存器实现。Cortex-M的中断控制寄存器包括:FAULTMASK、PRIMASK、BASEPRI、BASEPRI_MAX。总开关的本质是变更当前执行优先级,根据Cortex-M的架构设计,只有优先级高于当前执行优先级的中断或异常才能抢占C
阅读全文
摘要:一、简单说明: cleanup作为__attribute__属性中的一个可选属性值 其作用是当其声明的变量离开了其生命周期,那么 会自动调用你所指定的销毁函数 二、例子: 执行结果: current str : hello world! final str : hello world! 再通过 va
阅读全文
摘要:使用内嵌汇编,要先编写汇编指令模板,然后将C语言表达式与指令的操作数相关联,并告诉GCC对这些操作有哪些限制条件。例如在下面的汇编语句: “movl %1,%0”是指令模板;“%0”和“%1”代表指令的操作数,称为占位符,内嵌汇编靠它们将C语言表达式与指令操作数相对应。 指令模板后面用小括号括起来的
阅读全文
摘要:A memory barrier, also known as a membar, memory fence or fence instruction, 是一种屏障指令,它使中央处理单元(CPU)或编译器对在屏障指令之前和之后发出的内存操作强制执行排序约束。这通常意味着,在 屏障之前发出的操作 保证
阅读全文
摘要:Table 4-9 Compiler storage of data objects by byte alignment TypeBytesAlignment char, bool, _Bool 1 Located at any byte address. short, wchar_t 2 Loca
阅读全文
摘要:The keyword format is either of the following: __attribute__((attribute1, attribute2, ...)) __attribute__((__attribute1__, __attribute2__, ...)) For e
阅读全文
摘要:#define LOG2_8BIT(v) (8 - 90/(((v)/4+14)|1) - 2/((v)/2+1)) #define LOG2_16BIT(v) (8*((v)>255) + LOG2_8BIT((v) >>8*((v)>255))) #define LOG2_32BIT(v) (16*((v)>65535L) + LOG2_16BIT((v)*1L >>16*((v)>655...
阅读全文
摘要:#include <stdio.h> #include <limits.h> #include <stdint.h> #include <assert.h> #include <time.h> /** * @brief 通过迭代查找1累加,多少位就循环多少次,简单明了也因此最慢。 * @param
阅读全文
摘要:1. 如果已经用MDK(KEIL)的默认设置写了好多中文,那么先用notepad把文件一一打开然后转变编码格式为 utf-8 without ROM,如下: 2. 如果还没有开始编辑,或者已经用notepad修改完了编码格式,那么把MDK的默认编码格式ANSCI 改为UTF-8,如下图: 依次: E
阅读全文
摘要:2、 带参宏一般用法 比如#define MAX(a,b) ((a)>(b)?(a):(b))则遇到MAX(1+2,value)则会把它替换成: ((1+2)>(value)?(1+2):(value))注意事项和无参宏差不多。 但还是应注意 则,输入FUN(345)会被替换成什么? 其实,如果这么
阅读全文
摘要:看到以下代码,不明白查了一下:
阅读全文
摘要:当出现这个问题时,往往是因为你没有在RCC寄存器中把相关的时钟使能打开。 配置寄存器之前记得调用"RCC_AxxxPeriphClockCmd"先打开需要配置的时钟源,别调用了“RCC_AxxxPeriphResetCmd"。 相关函数定义源代码如下:
阅读全文

浙公网安备 33010602011771号