- 博客(7)
- 收藏
- 关注
原创 关键字volatile和register
用关键字volatile声明变量,是用来告诉编译器每次对此变量的引用都需要从内存地址中读取,即取消编译器对此变量的优化编译。当某次引用没用volatile声明的变量时,其被编译器从内存地址中读取到AX(某通用寄存器)中,那么在其后的引用中,如果AX寄存器没用被改变,那么编译器会优化成直接读取AX寄存器。用一个例子来说明:volatile int i = 4;int j = i;
2016-09-19 20:15:51
1113
转载 #pragma pack(n)和__attribute__((aligned(m)))的区别
#pragma pack(n)和__attribute__((aligned(m)))的区别:前 者告诉编译器结构体或类内部的成员变量相对于第一个变量的地址的偏移量的对齐方式,缺省情况下,编译器按照自然边界对齐,当变量所需的自然对齐边界比n大 时,按照n对齐,否则按照自然边界对齐;后者告诉编译器一个结构体或者类或者联合或者一个类型的变量(对象)分配地址空间时的地址对齐方式。也就是所,如 果
2016-09-08 09:57:39
412
原创 分块式内存管理原理
内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。内存管理的实现方法有很多种,他们其实最终都是要实现 2 个函数:malloc 和 free;malloc 函数用于内存申请,free 函数用于内存释放。分块式内存管理是众多内存管理方式中的一种。它的实现原理如下图所示。从上图可以看出,分块式内存管理由
2016-09-08 08:44:14
3399
原创 ucos iii学习笔记——为什么选择ucos iii
首先我们得先讨论前后台系统和RTOS(Real Time OS)的区别。前后台系统,也即是我们所说的裸机程序,它的结构通常包括一个死循环和若干个中断服务程序,直接上图,我们有一个直观认识:假如Task2是一个延时任务,当程序执行到Task2时,CPU只能干等,这样就浪费了CPU资源。进一步说,当在延时阶段,某种特发情况需要Task4响应,此时系统无法得到实时响应,只能一直按顺序执行下去
2016-09-01 12:24:40
6590
原创 在本科应掌握嵌入式哪些技能(学生角度)
本人本科刚毕业,专业是测控技术与仪器,和嵌入式开发有着极大的关联。经过毕业设计的一次洗礼,也对还处于学生阶段的我们应该掌握哪些嵌入式技能有了一个较浅的理解,如有不正还望指正。(1)了解计算机基础这个是基础,起码得了解计算机的基本组成部分,比如cpu、储存器、总线等知识,可以为日后我们理解单片机的组成原理打下基础。(2)模拟与数字电路这个在我们设计电路时起到关键的作用。不可否认现在很
2016-08-21 16:18:49
1027
原创 总结0欧姆电阻的用处
一些搞嵌入式开发的同学经常可以在一些原理图上看到0Ω电阻,不仅会发起疑问:0Ω电阻不就相当于导线吗,这样做有什么意义呢?其实在一开始我也心存同样的疑惑,直到接触了几个项目后,观摩实验室师兄如何在原理图中巧妙应用0Ω的电阻后,才恍然大悟。现对此进行总结:(1)作为跳线用。一般情况下,产品不应出现跳线或拨码开关,避免用户乱动设置。如果某段线路不用,直接不贴该电阻即可,不影响外观。同时,空置跳线在高
2016-08-21 14:17:55
1180
原创 C语言的良好编程习惯
从编程菜鸟一路走来,慢慢对编程习惯有了一个新的认识。因为曾经我写的代码的可读性令自己也感到哭啼皆非,搞得自己晕头转向。今天特意来分享一下自己的一些关于编程习惯的心得。很多人以为代码一敲完,能得到预期的结果,就万事ok,其实不然。后面的程序调试、维护和升级是一个项目中很重要的一部分,这就要求我们必须规范编程习惯。(1)模块化编程试想一下,如果一个项目的所有功能都在一个main.c里面实现
2016-08-17 18:45:16
3914
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人