
嵌入式常用技巧
Amao_come_on
这个作者很懒,什么都没留下…
展开
-
浅谈单片机程序设计中的“分层思想”
随便写下的一点东西,本来打算去发表,不过想想还是算了,不是什么重要的东西,不过这个东西确实很有用。文章懒的去组织和修改了,随便看看吧。分层的思想,并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用。看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种恍然大悟的感觉。如果说我不懂LCD怎么驱动,那好办,看一下datasheet,参考一下阿别人的程序,很转载 2014-09-24 18:56:55 · 556 阅读 · 0 评论 -
想成为嵌入式程序员应知道的0x10个基本问题
预处理器(Preprocessor)1 . 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1) #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2)懂得预处理器将为你计算常数表达式的值,因此,直接写出你转载 2014-12-06 00:29:17 · 389 阅读 · 0 评论 -
sourceinsight高级功能
http://blog.chinaunix.net/uid-25100840-id-271154.htmlhttp://www.360doc.com/content/11/1117/09/6979751_165098305.shtmlhttp://blog.youkuaiyun.com/jamestaosh/article/details/4457454http://www转载 2014-12-13 17:42:58 · 1278 阅读 · 0 评论 -
C语言错误处理策略
今天写程序时,发现自己平时不爱做异常处理。(C语言的异常处理比起java的来总觉得好费劲啊~) 上网google了一下看见了一位大牛的解释,好厉害,膜拜一下 1. 返回值方式:用函数的返回值标志函数是否执行成功。比如成功返回1,失败返回0。这种方式的好处是简单方便,而且不影响效率,保持了c语言的高效率。但是仍然有问题,一个问题是代码可读性的问题,如果每个函数都有这样的返转载 2015-11-20 16:27:45 · 1357 阅读 · 0 评论 -
如何编写易于移植的C++ 程序
如何编写易于移植的C++ 程序由于操作系统的差异,同一种操作系统本身版本的差异,目前C++标准库提供的功能仍然有限以及C++编译器产品不是完全兼容等问题,使得我们在移植大型应用程序的时候往往会出现很多难以解决的问题,如何合理的避免他们提高C++程序的移植性,本文作者从源代码的组织安排等方面提出了一些实用的建议。 当我们编写服务器端的软件产品时,我们往往需要为同一个软件产品推出多种不同平转载 2015-11-17 11:03:28 · 477 阅读 · 0 评论 -
C语言宏定义和宏定义函数
要写好C语言,漂亮的宏定义是非常重要的。宏定义可以帮助我们防止出错,提高代码的可移植性和可读性等。 在软件开发过程中,经常有一些常用或者通用的功能或者代码段,这些功能既可以写成函数,也可以封装成为宏定义。那么究竟是用函数好,还是宏定义好?这就要求我们对二者进行合理的取舍。 我们来看一个例子,比较两个数或者表达式大小,首先我们把它写成宏定义: #define MAX( a, b)转载 2015-11-24 10:04:51 · 564 阅读 · 0 评论 -
C语言中的内联函数(inline)与宏定义(#define)详细解析
先简明扼要,说下关键:1、内联函数在可读性方面与函数是相同的,而在编译时是将函数直接嵌入调用程序的主体,省去了调用/返回指令,这样在运行时速度更快。2、内联函数可以调试,而宏定义是不可以调试的。内联函数与宏本质上是两个不同的概念如果程序编写者对于既要求快速,又要求可读的情况下,则应该将函数冠以inline。下面详细介绍一下探讨一下内联函数与宏定义。一、内联函数是什么?内转载 2015-11-24 10:22:48 · 1044 阅读 · 0 评论 -
inline函数和宏函数的区别
转自:http://blogt.chinaunix.net/space.php?uid=25213672&do=blog&id=125451#define TABLE_COMP(x) ((x)>0?(x):0) 就定义了一个宏。 为什么要使用宏呢?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地转载 2015-11-24 10:16:35 · 609 阅读 · 0 评论 -
函数式宏定义与普通函数
在C及C++语言中允许用一个标识符来表示一个字符串,称为宏,该字符串可以是常数、表达式、格式串等。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。若字符串是表达式,我们称之为函数式宏定义,那函数式宏定义与普通函数有什么区别呢?我们以下面两行代码为例,展开描述:转载 2015-11-24 10:11:49 · 885 阅读 · 0 评论 -
宏、函数、宏函数的区别
http://hi.baidu.com/pobenliu/blog/item/3e458208279486a32fddd43f.html宏、函数、宏函数的区别先说宏和函数的区别:1. 宏做的是简单的字符串替换(注意是字符串的替换,不是其他类型参数的替换),而函数的参数的传递,参数是有数据类型的,可以是各种各样的类型.2. 宏的参数替换是不经计算而直接处理的,而函数调用是转载 2015-11-24 10:13:26 · 449 阅读 · 0 评论 -
深入理解C语言的define和内联函数
深入理解C语言的define和内联函数时间 2014-05-17 22:43:00 Bill's Blog原文 http://ibillxia.github.io/blog/2014/05/17/insight-into-define-and-inline-function-in-c/主题 C语言概述在 Robert C.Searcord 的 T转载 2015-11-24 10:39:41 · 790 阅读 · 0 评论 -
C语言的那些小秘密之异常处理
版权声明:本文为博主原创文章,未经博主允许不得转载。很多读者在此之前可能根本没有使用或者听说过C语言的异常处理,印象中都是C++或者java才有的东西,C语言怎么会有异常处理呢?当然估计在大学出于一般的性的学习考试之类的话老师几乎是不会提及C语言的异常处理的,那么到底什么是异常处理?C语言中又该如何来实现异常处理呢?那么我们今天就讲解一种典型的实现C语言异常处理的方法,以setjmp(转载 2015-11-24 22:22:50 · 471 阅读 · 0 评论 -
编写优质嵌入式C程序
版权声明:本文为博主原创文章,未经博主允许不得转载。目录(?)[+]简介C语言特性1处处都是陷阱11 无心之过12 数组下标13 容易被忽略的break关键字14 意想不到的八进制15指针加减运算16关键字sizeof17增量运算符和减量运算符18逻辑与和逻辑或的陷阱19结构体的填充2不可轻视的优先级3隐式转换编译器1不能简单的认为是个工具2不能依赖转载 2015-11-21 12:37:24 · 2361 阅读 · 0 评论 -
小心整数比较中的符号属性
Title:小心整数比较中的符号属性 如果没有红色的强制转换,当最高bit为1时,结果是完全不一样的。 long lFileLen = _filelength(fileno(m_aLogFile[LOG_LIST_FILE ].pFile)); if((DWORD)lFileLen >= MAX_FILE_LENGTH) { return转载 2015-12-04 22:00:32 · 388 阅读 · 0 评论 -
关于可重入性问题的分析(在嵌入式编程中)
可重入函数概念:主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。也可以这样理解,重入即表示重复进入,首先它意味转载 2014-12-06 00:25:04 · 1810 阅读 · 0 评论 -
中断函数参数深入分析总结
2012.12.29笔记中断函数参数分析总结Int request_irq (unsigned int irq, irq_handler_t handler, unsigned long flags, const char *devname, void *dev_id) A.先来分析形参: 第一个参数irq: 表示要分配的中断号。对于一些设备转载 2014-10-21 21:51:40 · 7391 阅读 · 0 评论 -
软件架构设计的一般过程
在一个以软件架构为中心的软件项目开发过程中,最常见的开发过程大致分五到六个阶段:概念化阶段、分析阶段、架构阶段、详细设计阶段(一般情况下特别是结合敏捷模式时都会被裁剪掉)、并行开发与测试阶段、验收与交付阶段。软件架构设计阶段依赖于分析阶段并以软件需求规约为主要输入。那么是不是软件架构工程师必须等到软件需求规约评审通过后才开始工作呢?前面讲到软件架构的策略时讲到全面认识需求与关键需求转载 2014-09-24 19:15:11 · 2492 阅读 · 1 评论 -
有限状态机(FSM)的设计与实现(一)
有限状态机(FSM)是表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用。通常FSM包含几个要素:状态的管理、状态的监控、状态的触发、状态触发后引发的动作。本文主要阐述一下状态机的几种设计方法。1:switch case/if else设计方法curEvent = getEvent();curState = getCurState();s转载 2014-09-24 19:08:51 · 1045 阅读 · 0 评论 -
状态机实践入门——程咬金只要三斧头厉害
不用怀疑,单片机的万能语言就是状态机。还希望大家不要条件反射式的看到状态机就以为我要讲什么VHDL的东西——状态机是一种思维模式,是计算机理论的立足之本(不相信请参考清华大学出版社的《自动机理论与应用》)——因此状态机的实现与语言本身关系并不是绝对的。本文要讨论的状态机,从实现方式上更类似于Java中常用的那种思维模式,而与VHDL相去甚远。路要一步一步走,饭要一口一口吃,为了不把后来人吓转载 2014-09-24 18:50:40 · 726 阅读 · 0 评论 -
有限状态机(FSM)的设计与实现(二)
分层状态机的设计:对于状态较多的状态机,通常的设计会维护一个庞大的二维矩阵,所有状态耦合在一起,这往往导致维护困难,由于可能存在许多公共的特性,也会导致许多状态具有相同的处理函数。针对这些问题我们可以通过设计分层状态机来解决,主要的思想就是根据不同的功能模块设计出多个状态机,各个状态机分布在不同的层次上。上层状态机调用下层状态机时,上层状态机入栈,下层状态机变为当前处理状态机。通常我们使用堆栈转载 2014-09-24 19:10:24 · 958 阅读 · 0 评论 -
专题:基于ARM的嵌入式Linux系统开发 主讲:刘老师
http://www.embedu.org/Lecture/index.htm转载 2014-09-24 21:03:09 · 603 阅读 · 0 评论 -
如何理解优先级反转这个概念
优先级翻转发生的条件: 1、首先发生翻转需要有三个任务,它们的优先级分别是高、中、低。 2、低优先级和高优先级都需要take同一个信号量。 优先级翻转的过程: 1、低优先级先take到信号量。 2、低优先级被中优先级任务抢占。(然后低优先级任务就只能等中优先级任务执行完,再继续执行之后,才能释放信号量了) 3、高优先级需要take该转载 2014-09-25 10:19:06 · 663 阅读 · 0 评论 -
青风和大家一起学Stellaris系列ARM——五.看门狗的使用
在实际的MCU应用系统中,由于常常会受到来自外界的某些干扰,有可能(对规范的设计概率极小)造成程序的跑飞而陷入死循环,从而导致整个系统的陷入停滞状态并且不会自动恢复到可控的工作状态。所以出于对MCU运行的安全考虑,便引入了一种专门的复位监控电路,俗称看门狗(WatchDog)。看门狗电路所起的作用是一旦MCU运行出现故障,就强制对MCU进行硬件复位,使整个系统重新处于可控状态(要想精确恢复到故障之转载 2014-09-25 21:30:25 · 1042 阅读 · 0 评论 -
GNU ARM汇编(综合的学习资料)
http://www.linuxidc.com/Linux/2012-08/68020.htm转载 2014-09-25 21:34:39 · 810 阅读 · 0 评论 -
程序基础C语言常量(const)参数
函数 - 常量(const)参数 非指针参数(也就是传值参数)不会被修改原始值, const 对它是没有意义的。 const 只用于指针。 1. 第一种用法: const 类型 *变量: 这种用法将限制修改指针指向的值。 #include int fun(const int *p) { *p += 1;转载 2014-10-13 21:34:22 · 1762 阅读 · 0 评论 -
__I、 __O 、__IO是什么意思?怎么用
野火中总会有人会问各种不同的问题,而很多问题很适合其他人参考了,故把它粘贴上来,以供参考:__I、 __O 、__IO是什么意思?这是ST库里面的宏定义,定义如下:#define __I volatile const /*!#define __O volatile /*!#defin转载 2014-10-15 13:44:51 · 1164 阅读 · 0 评论 -
const成员函数
const成员函数看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const 是constant的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮转载 2014-10-15 13:43:47 · 451 阅读 · 0 评论 -
防御式编程
在软件开发过程中,不可避免的会遇到错误处理,而且这部分对于整个软件的健壮性有非常大的作用,它是软件除了功能性以外最重要的指标了,一个软件成功与否与其健壮性有很大的联系。我在以前的开发中也时常思考错误处理,因为这部分代码逻辑比较不容易梳理清楚。以异常的处理为例,以前通常就采用比较简单粗暴的处理方式:用try..catch加Exception把所有异常都包起来,这样简单省事,写的代码最少,相信很多童鞋转载 2014-10-15 19:30:07 · 528 阅读 · 0 评论 -
利用函数参数和返回值提高嵌入式软件质量
[导读] 利用函数参数和返回值提高嵌入式软件质量 引 言 提高软件代码的质量是每一个软件设计者都必须考虑的问题,这涉及软件的有效性和经济价值。基于嵌关键词:函数参数利用函数参数和返回值提高嵌入式软件质量 引 言 提高软件代码的质量是每一个软件设计者都必须考虑的问题,这涉及软件的有效性和经济价值。基于嵌入式系统的软件设计多数是以实时操作系统为平台,这和传统的以转载 2014-10-22 11:21:54 · 1061 阅读 · 0 评论 -
【C语言学习】封装和模块化思想
【C语言学习】封装和模块化思想2014-7-6阅读1162 评论2刚学习完C后,做的关于C的课程设计是在一个源文件中放了几百行代码,而且各个功能之间都是相互依赖的,这样就会很麻烦。因为当我要修改某个地方的时候,就会牵连着要修改喝多的地方。而在实际的程序设计中,这也是不可取的。因此,模块化和封装的思想就显得很重要了!!!★static变量static变量的一个显著的作转载 2015-12-04 22:18:36 · 2235 阅读 · 0 评论