
嵌入式C语言基础
烛火飞蛾
嵌入式驱动高级工程师
展开
-
"__IO uint32_t" 中的__IO 和volatile 表达的意思
这个 _IO 是指静态 volatile,如下图在程序中宏定义:uint32_t 是指32位的无符号整形变量。volatilevolatile 类型是这样的,其数据确实可能在未知的情况下发生变化。比如,硬件设备的终端更改了它,现在硬件设备往往也有自己的私有内存地址,比如显存,他们一般是通过映象的方式,反映到一段特定的内存地址当中,这样,在某些条件下,程序就可以直接访问这些私有内存...原创 2019-02-23 18:02:25 · 5428 阅读 · 2 评论 -
#pragma pack(push,1)与#pragma pack(1)的区别
#pragma pack是给编译器用的参数设置,有关结构体字节对齐方式设置,#pragma pack指定数据在内存中的对齐方式。#pragma pack (n) /*C编译器将按照n个字节对齐。*/#pragma pack () /*取消自定义字节对齐方式。*/#pragma pack (push,1) /*是指把原来对齐方...原创 2019-06-21 20:14:07 · 1165 阅读 · 0 评论 -
C语言:break、continue、goto、return和exit的区别
C语言中有几个语句可以打乱程序的执行顺序,不同的语句对应不同的功能。1、break break语句表示退出当前的程序段,跳过当前程序段里未执行的程序,执行新的程序段代码。 1、break经常用在switch语句中,在switch语句中使用了break语句,当执行switch语句中的break语句时,仅退出switch语句,执行switch后面的...原创 2019-08-03 17:54:50 · 1591 阅读 · 0 评论 -
单片机的堆和栈(Heap & Stack)详解
一、程序内存分配由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态...原创 2019-07-05 18:41:21 · 20551 阅读 · 7 评论 -
C/C++ 大小端、位域、内存详解
前言面试时遇到关于大小端、位段(或者叫位域)和内存对齐的考题,然后就不知所措了。这部分对于嵌入式底层工作者是必须要掌握的,其他方面不是必须的;但还是很有必要学习理解这些知识点,因为它可以让你更了解C++的,了解程序在内存的运行情况,也能加深对计算机系统的理解。1、大小端 在现代的“冯.诺依曼体系结构”计算机中,计算机内的数制都是采用二进制来存储,并且是以8位,一个字节为...原创 2019-06-25 20:28:39 · 858 阅读 · 2 评论 -
#pragma pack 用法详解
pack 为 struct, union 和 class 等的成员对齐指定字节边界. 与编译选项(属性 -> 配置属性 -> C/C++ ->代码生成 -> 结构成员对齐)的 /Zp 开关不同, 它不针对整个项目, 而仅针对模块, 比如一个编译单元.1. #pragma pack(show)以警告信息的形式显示当前字节对齐的值.2. #pragma pac...转载 2019-06-21 20:17:49 · 1509 阅读 · 0 评论 -
#Pragma Pack(n)内存分配
#Pragma Pack主要是用在字节对齐方面,为什么要对齐呢? 因为计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。#Pragma Pack 指定对齐的字节数: 1 、...原创 2019-06-21 19:59:11 · 272 阅读 · 0 评论 -
C语言 字节对齐问题 详解
一 什么是字节对齐 现代计算机中,内存空间按照字节划分,理论上可以从任何起始地址访问任意类型的变量。但实际中在访问特定类型变量时经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序一个接一个地存放,这就是对齐。二 对齐的原因和作用 2.1、硬件平台 不同硬件平台对存储空间的处理上存在很大的不同。某些平台对特定类型的数据...原创 2019-06-20 19:06:53 · 1223 阅读 · 0 评论 -
存储类别:auto/static/register/extern
C语言中提供了存储说明符auto,register,extern,static说明的四种存储类别。四种存储类别说明符有两种存储期:动态存储期和静态存储期。 在存储空间的位置分配为:1、程序区;2、静态存储区;3、动态存储区。 静态存储方式程序运行期间系统分配固定存储空间,动态存储方式根据需求动态分配存储空间。 auto和register对应动态存储区,...原创 2019-08-05 19:19:54 · 1120 阅读 · 0 评论