![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深入学习C、嵌入式
文章平均质量分 60
浩然42
这个作者很懒,什么都没留下…
展开
-
EFM32 在Keil MDK 4.72 + Jlink V4.26 成功建立开发环境
前言:刚上手EFM32,用Jlink仿真器的时候,悲催的发现提示仿真器是盗版的,原创 2014-04-18 22:45:59 · 3897 阅读 · 0 评论 -
union中隐藏的字节对齐
不要认为内存字节对齐是struct的专利,在union中也会出现内存对齐的情况。#include #include union u{int a[5]; //20个字节char b;//1个字节double c;//8个字节};按理说sizeof(u)等于20,但是这里最大的数据单元是double,内部数据将会按照8字节进行对齐,所以int a[5]按照8字节对齐后就转载 2014-05-20 16:19:54 · 747 阅读 · 0 评论 -
谈谈#define st(x) do { x } while (__LINE__ == -1) 的理解
#define HAL_ENTER_CRITICAL_SECTION(x) st( x = EA; HAL_DISABLE_INTERRUPTS(); )#define HAL_EXIT_CRITICAL_SECTION(x) st( EA = x; )其中st(x)应作何解释?#define st(x) do { x } while (__LINE__ == -1)原创 2014-05-19 14:01:28 · 4243 阅读 · 3 评论 -
assert()函数用法
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include assert.h>void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badpt原创 2014-10-08 13:55:33 · 476 阅读 · 0 评论 -
函数指针用法 以及typedef 优化函数指针
[cpp] view plaincopychar (*pFun)(int); char glFun(int a){ return;} void main() { pFun = glFun; (*pFun)(2); } 第一行定义了一个指针变量pFun。首先我们根据前面提到的“形式1”认识到它是一个指向某种函转载 2014-10-08 13:57:36 · 593 阅读 · 0 评论 -
C语言的预编译
预处理功能主要包括宏定义,文件包含,条件编译三部分。分别对应宏定义命令,文件包含命令,条件编译命令三部分实现。预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。预处理过程还会删除程序中的注释和多余的空白字符。预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整原创 2014-10-11 09:59:30 · 485 阅读 · 0 评论 -
静态链接和动态链接的区别
引言即使是最简单的HelloWorld的程序,它也要依赖于别人已经写好的成熟的软件库,这就是引出了一个问题,我们写的代码怎么和别人写的库集成在一起,也就是链接所要解决的问题。首先看HelloWorld这个例子:[cpp] view plaincopy// main.c 1 #include 2 3 int main(i转载 2014-10-11 10:13:23 · 561 阅读 · 0 评论