1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: (1)控制资源的使用,通过线程同步来控制资源的并发访问: (2)控制实例的产生,以达到节约资源的目的: (3)控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信. 2.尽量避免随意使用静态变量 要知道,当某个对象被定义为stataic的变量所引用,那么GC通常是不会回收这个对象所占有的内存,如 public cl…
union 概念 union 在中文的叫法中又被称为共用体,联合或者联合体,它定义的方式与 struct 是相同的,但是意义却与 struct 完全不同,下面是 union 的定义格式: union 共用体名 { 成员列表 }共用体变量名; 那么它与结构体的定义方式相同,那么区别是什么呢,下面通过一个 struct 与 union 的嵌套来说明两者的区别所在. struct my_struct { int type; union my_union { char *str; int number;…
最近在看esp32的idf,有一些宏定义使用了do while(0)这种看起来好像没啥用的代码.然后我查了一下资料,发现在linux内核代码中经常用到这个东西! 现在就将这个东西整理一下. 为什么在内核中碰到很多 #define ... do{...} while(0) 有以下几点原因: 1.空语句在编译的时候会出现警告,所以有必要用#define FOO do{ } while(0) 2.给定一个基本块,可以在里面定义局部变量 3.为了能够在条件语句中使用复杂的宏定义.例如下面这段代码: #d…
一.新手常常问的一个问题:C语言和嵌入式C编程有什么区别?而嵌入式工程师一般都会告诉你,其区别在于嵌入式的C语言是跑在嵌入式的开发板上的,CPU和电脑不一样,所以编译器也是不一样的,生成的可执行程序也是不一样的.不同于一般形式的软件编程,基于特定的硬件平台嵌入式系统编程的,势必要求其编程语言具备较强的硬件直接操作能力.毫无疑问,汇编语言是具备这种特点的.然而,由于该语言编写开发过程的复杂性,通常不选择它用于嵌入式系统开发,而C语言是一种“低层次”的语言,已经成为嵌入式系统开发的最佳选择. 二.嵌…
单片机的编程语言和开发环境 LET′S TRY“嵌入式编程”: 3 of 6 本连载讲解作为嵌入式系统开发技术人员所必需具备的基础知识.这些基础知识是硬件和软件技术人员都应该掌握的共通技术知识. 在“单片机入门(1)”和“单片机入门(2)”中,我们学习了单片机硬件方面的知识.本期我们将学习开发环境和编程语言吧. CPU懂的机器语言 人性化的C语言 能够找出程序错误的调试器 综合开发环境 CPU懂的机器语言 单片机的CPU从存储器读取程序,但是一次只能读取一条指令,然后解释每条指令,并执行.存储器…
单片机的基本构成.工作原理 LET′S TRY“嵌入式编程”: 1 of 6 本连载讲解作为嵌入式系统开发技术人员所必需具备的基础知识.这些基础知识是硬件和软件技术人员都应该掌握的共通技术知识.有了电子电路和数字电路的基础知识,就可以开始学习嵌入式系统的核心元件-单片机.从本期开始我们将为大家介绍单片机的基础知识.在单片机入门系列讲座中,首先学习单片机的基本构成和工作原理.以及外围功能电路,然后,挑战一个实际单片机的运行. 单片机 CPU 内存 “为何要使用单片机……” 单片机是控制电子产品的大…
虽然使软件正确是一个工程合乎逻辑的最后一个步骤,但是在嵌入式的系统开发中,情况并不总是这样的.出于对低价产品的需求,硬件的设计者需要提供刚好足够的存储器和完成工作的处理能力.所以在嵌入式软件设计的最后一个阶段则变成了对代码的优化. 现代的C和C++编译器都提供了一定程度上的代码优化.然而,大部分由编译器执行的优化仅涉及执行速度和代码大小的一个平衡.你的程序能够变得更快或者更小,但是不可能又变快又变小.经过本人在嵌入式系统设计和实现过程中实践,下面介绍几种简单且行之有效的C/C++代码的优化方法.…
http://www.cnblogs.com/dugang/archive/2010/10/22/1858478.html AWT AWT是Abstract Window Toolkit(抽象窗口工具包)的缩写,是SUN专门针对Java GUI编程提供的最早的也是最初的开发工具包,用来建立和设置Java图形用户界面,这个工具包提供了一套与本地图形界面交互的接口.AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系(peers).也就是说,当我们利用 AWT 来构件图形用户界面的时…
我们在链接脚本在编程中的高级运用之中的一个可变长数组中已经讲述了编译链接的原理,并且以uboot命令为例具体介绍链接脚本怎样实现可变长数组. 本章在前者的基础上继续讲述链接脚本在执行时库中的高级应用技巧.以及编译器怎样支持类对象的构造和析构函数.本章的应用原则上类似于可变长数组,但本章更加側重讲述执行时库的实现原理,其不仅通过链接脚本的section来实现可变长数组去支持随意多类对象的构造函数和析构函数,并且还支持特定函数体的"可变长". 一.执行时库和类对象的构造.析构函数 非常多程…
过了,一天,周又到了,博主终于可以拿出时间来把上一次没有给大家展示完了的内容今天在这里一并展示给大家,希望和大家共同进步,共同学习,同时我也虔诚的希望各位业界的朋友把自己的工作经验拿出来大家一起分享,一起交流,一起学习,技术的革新少不了大家努力!!!,好了.废话不多说,开始今天的内容吧: 第一部分:制作根文件系统 1.其实对于这个根文件系统,博主一直没有搞明白,何为根文件,想必知道device tree 的朋友并不 陌生,系统本身就是个树形结构,我们整个系统除了u-boot ,内核,其次就是  …