
程序设计
文章平均质量分 55
求佛_ce123
专注于嵌入式软件开发
展开
-
如何当好一个师长之软件开发篇
目录一、要勤快。二、要摸清上级的意图。三、要调查研究。四、要有个活地图。五、要把各方面的问题想够想透。六、要及时下达决心。七、要有一个很好的很团结的班子。八、要有一个很好的战斗作风。九、要重视政治,亲自做政治工作。刷知乎的时候,看到了《如何当好一个师长》这篇文章,感触很深。做任何事情能做到这个程序,就没有做不成。一、要勤快。不勤快的人办不好事情,不能当好军事指挥员。应该自己干的事情一定要亲自过目,亲自动手。比如,应该上去看的山头就要爬上去,应该了解的情况就要及原创 2021-03-29 07:04:47 · 642 阅读 · 0 评论 -
如何在SourceInsight中选中匹配的大括号中的内容
如何在SourceInsight中选中匹配的大括号中的内容 要分析的代码很长,多个for,if等分析嵌套在一起,代码有点乱,找到了这个分支的头,却不知道尾在哪,找到了尾却不知道哪是开头,在网上找了一下资料,发现SourceInsight有一个功能可以实现选中匹配大括号中的内容,分析比较长分支的代码非常有用. 在要进行匹配的第一个大括号前面双击,如下图,想要选中if后"{……}"的范围,在if后的第原创 2013-08-20 18:51:42 · 11353 阅读 · 0 评论 -
详解C语言的类型转换
详解C语言的类型转换1.自动类型转换字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128~127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0~255(有些机器把char型当做unsighed char型对待, 取值范围总是0~255)。如果一个运算符两边的运算数类型不同,先要将其转换为相同的类型,即较低类型转换为较高类型,然后再参原创 2013-06-17 00:41:13 · 15956 阅读 · 8 评论 -
C语言中的三字母词(trigraph)
本文介绍了ANSI C标准中的三字母词(trigraph),包括三字母词的简单定义,作用,编程中可能会犯的一些错误,如何编译等,最后还留了一个简单的问题。原创 2013-07-07 17:04:34 · 4889 阅读 · 1 评论 -
C语言中的转义字符
C语言中的转义字符简介 在字符集中,有一类字符具有这样的特性:当从键盘上输入这个字符时,显示器上就可以显示这个字符,即输入什么就显示什么。这类字符称为可显示字符,如a、b、c、$、+和空格符等都是可显示字符。 另一类字符却没有这种特性。它们或者在键盘上找不到对应的一个键(当然可以用特殊方式输入),或者当按键以后不能显示键面上的字符。其实,这类字符是为控制作用而设计的,故称为控制字符。 在C语言中,原创 2013-06-11 10:35:11 · 34693 阅读 · 0 评论 -
c语言中字符串常量定义时的换行问题
c语言中字符串常量定义时的换行问题 如果我们在一行代码的行尾放置一个反斜杠,c语言编译器会忽略行尾的换行符,而把下一行的内容也算作是本行的内容.这里反斜杠起到了续行的作用.构建较长的字符串是续行的常见用途,还有一个作用是定义跨行的宏. 如果我们不使用反斜杠,当我们试图初始化为一个跨多行的字符串是,c语言编译器就会发出警告和错误.如下面的语句所示:char letters[] = {"abcde原创 2013-10-09 07:28:23 · 15547 阅读 · 4 评论 -
C语言中以字符串形式输出枚举变量
每个枚举常量对应一个整形数字,很多时候可以像整形一样使用.但枚举类型也有不方便的地方.比如不能直接输出枚举类型的字符串常量.举例说明.定义了枚举类型:typedef enum { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY} t_Week;在程序中定义了变量t_Week vl_Week=S...原创 2020-01-31 23:43:07 · 10715 阅读 · 2 评论 -
深入浅出C语言中的柔性数组
深入浅出C语言中的柔性数组 在日常的编程中,有时候需要在结构体中存放一个长度动态的字符串,一般的做法,是在结构体中定义一个指针成员,这个指针成员指向该字符串所在的动态内存空间,例如:typedef struct test { int a; double b; char *p; }; p指向字符串。这种方法造成字符串与结构体是分离的,不利原创 2013-05-25 14:46:03 · 20475 阅读 · 2 评论 -
控制台重定向stdout & stderr
控制台重定向stdout & stderr 通常,从一个控制台(命令提示符)应用程序或命令的输出将发送到两个单独的流。在常规的输出发送到标准出 (stdout) 并将错误消息发送到标准错误 (stderr)。当你重定向控制台输出使用">"符号,只重定向标准输出。要重定向stderr,必须指定"2 >"的重定向符号。这将选择第二个输出流stderr。示例$ kill -HUP 1234 >killo原创 2014-07-30 16:06:24 · 13118 阅读 · 0 评论 -
linux中关于标准输入中涉及EOF的处理方式
linux中关于标准输入中涉及EOF的处理方式 标准输入设备是行缓冲的,当从键盘上输入字符串,输入的字符串会首先被送到输入缓冲区中存储,当铵下回车键后才会去检测输入缓冲区中是否有了数据(也就是说fgets,fgetchar等函数这个时候才去从缓冲区中读数据).我们可以把输入缓冲区理解为文件,那么对于这个文件来说,它也有结束的时候,输入函数在从缓冲区中读文件的时候也会去检测有没有流结束标志(EOF)原创 2014-05-30 09:25:01 · 7819 阅读 · 0 评论 -
#line的作用
#line指令改变_ _ _LINE_ _ _和_ _ _FILE_ _ _的内容。_ _ _LINE_ _ _和_ _ _FILE_ _ _都是编译程序中预定义的标识符。标识符_ _ _LINE_ _ _的内容是当前被编译代码行的行号,_ _ _FILE_ _ _的内容是当前被编译源文件的文件名。#line的一般形式是: #line number"filename"其中,number是原创 2014-06-06 11:15:21 · 6183 阅读 · 0 评论 -
嵌入式C语言优化小技巧
嵌入式C语言优化技巧1.引言嵌入式系统是指完成一种或几种特定功能的计算机系统,具有自动化程度高、响应速度快等优点, 目前已广泛应用于消费电子、工业控制等领域。嵌入式系统受其使用的硬件以及运行环境的限制, 非常注重代码的时空效率, 因此选择一种合适的开发语言十分重要。目前, 在嵌入式系统开发中可使用的语言很多,其中 C语言应用得最广泛。虽然用 C 语言编程具有许多优点,但基于嵌入式系统的 C语言和标原创 2013-12-12 10:04:06 · 7987 阅读 · 4 评论 -
C语言快速取以2为底的对数的方法
C语言快速取以2为底的对数的方法int FastLog2(int x){ float fx; unsigned long ix, exp; fx = (float)x; ix = *(unsigned long*)&fx; exp = (ix >> 23) & 0xFF; return exp - 127;}原创 2013-11-26 11:20:54 · 19467 阅读 · 2 评论 -
在线C语言编译器/解释器
在线C语言编译器/解释器 本文介绍两个C语言在线解释器/编译器,这些工具可以提高代码片段检测方便的工作效率,并可以保证这些代码的正确性,而且还可以和别人一起编辑/分享之间的代码,这样可以共同分析代码并相互协助完成代码段的检查.1.Codepad Codepad(http://codepad.org/)是一个简单的在线IDE编译器,适用于团队协作工作,帮助代码生成一个简短的URL,这样就可以和其他人原创 2013-09-26 08:24:59 · 26768 阅读 · 1 评论 -
Vim winmanager文件浏览自动更新
Vim winmanager文件浏览自动更新 使用winmanger插件时发现其中引用的fileexplorer不能自动更新到当前文件夹,进行如下修改就OK啦.修改winfileexplorer.vim中的FileExplorer_Start()函数:function! FileExplorer_Start()let b:displayMode = "winmanager"call s:Edi原创 2013-09-24 20:59:50 · 2699 阅读 · 0 评论 -
国际C语言混乱代码大赛代码赏析(一)
国际C语言混乱代码大赛代码赏析(一) 近段时间在看《C专家编程》,里面提到国际C语言混乱代码大赛(The International Obfuscated C Code Contest IOCCC)。IOCCC有许多令人捧腹之处,不管你是自己编写还是时候分析获胜者的代码,都能够以令人惊讶的方式扩展你的知识。通常有10种类型的获胜者:“对规则的最奇怪的滥用”,“最具创意的源代码布局”,“最简单的单行原创 2013-06-11 09:40:29 · 11861 阅读 · 14 评论 -
浅谈编程语言的类型系统
浅谈编程语言的类型系统 类型系统(type system)是一门编程语言最核心也是最基础的部分。无论该语言基于何种编程范式,都必须在开天辟地之初首先对类型系统作出明确的定义。这是因为,编程语言虽然五花八门,千奇百怪,但是归根结底,编程语言最终的目标,本质上无非是回答两个问题:如何表示信息;如何处理信息。 无论是面向过程的编程语言、面向对象的编程语言、函数式编程语言、并行编程语言或者其他任何千奇百怪原创 2013-05-28 09:02:15 · 5348 阅读 · 4 评论 -
华为软件编程规范学习(十一)--代码测试、维护
华为软件编程规范学习(十一)--代码测试、维护11-1:单元测试要求至少达到语句覆盖11-2:单元测试开始要跟踪每一条语句,并观察数据流及变量的变化11-3:清理、整理或优化后的代码要经过审查及测试11-4:代码版本升级要经过严格测试11-5:使用工具软件对代码版本进行维护11-6:正式版本上软件的任何修改都应有详细的文档记录其他11-1:发现错误立即修改,并且要记录下来11-2:关键的代码在汇编原创 2013-05-13 22:52:57 · 3218 阅读 · 0 评论 -
local function definitions are illegal解决办法
local function definitions are illegal解决办法 改动了一下程序,出现了好多"local function definitions are illegal"错误. 出现这个错误的原因就是少了一个右大括号“}”,报错的个数和这个函数的位置有关,好像也和作用域有关,或者和它的使用频度有关,反正报错的个数不太一样,是主应用程序的一个函数少了一个“}”. 解决方法:如果原创 2013-04-29 14:01:43 · 88166 阅读 · 2 评论 -
基于状态机编程思想的串口接收程序
基于状态机编程思想的串口接收程序 状态编程思想的理论知识可以参考之前写的一篇博客(http://blog.youkuaiyun.com/ce123/article/details/8222673),本文介绍一个例子--串口接收.状态机的状态定义如下:typedef enum{ IS_NULL = 0, IS_START, //已接收到起始符号,准备接收长度 IS_LEN, //已经接收到长度,准原创 2013-04-29 13:18:18 · 6591 阅读 · 1 评论 -
#pragma comment
#pragma comment一.简介#pragma comment( comment-type ,["commentstring"] )comment-type是一个预定义的标识符,指定注释的类型,应该是compiler,exestr,lib,linker之一.commentstring是一个为comment-type提供附加信息的字符串.二.参数使用说明compiler:放置编译器的版本或者名原创 2013-04-29 17:27:59 · 2587 阅读 · 0 评论 -
VS2012中的R6002 - floating point support not loaded错误
VS2012中的R6002 - floating point support not loaded错误一.问题描述 由于项目的需要,最近在VS2012中调试算法.出问题的代码片段如下(由printf函数引起的runtime error):fprintf(fpWrite2,"里程: %010f ",stpSample->buf[12] + stpSample->buf[13] * 256 + s原创 2013-04-27 15:49:06 · 14865 阅读 · 0 评论 -
warning:ISO C90 forbids mixed declarations and code
warning:ISO C90 forbids mixed declarations and code变量定义之前任何一条非变量定义的语句(重视:语句是会带分号的)都会引起这个警告! 将非变量的定义移到变量定义之后 即可,也就是变量的声明 必须在执行语句之前。原创 2012-12-14 18:47:21 · 10510 阅读 · 0 评论 -
基于C语言的状态机实现技术
基于C语言的状态机实现技术嵌入式开发交流群280352802,欢迎加入!一、简介 有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。有限状态机(Finite State Machine或者Finite State Automata)是软件领域中一种重要的工具,很多东西的模型实际上就是有限状态机。有限状态机(FSM)可以原创 2012-12-03 16:46:09 · 7301 阅读 · 1 评论 -
小议大小端模式对C语言的共用体结构的影响
小议大小端模式对C语言的共用体结构的影响1、一些问题问题1#include "stdio.h"union { int i; char ch[2];}key;main(){ key.i=65*256+66; printf("%c\t%c\n",key.ch[0],key.ch[1]);}答案是B A;为什么不是A B呢?原创 2011-12-25 20:39:28 · 8405 阅读 · 22 评论 -
小端模式与强制数据类型转换
小端模式与强制数据类型转换1.先从一个问题说开去C++数据类型转换的问题#include void main(){ int i=0xb62; char c; c=i; cout<<c<<endl;}这里为什么输出的是b?2.先检测一下我们所使用的电脑的CPU的字节序版本一(有问题,结果无论如何都是34,不能说明34是高地址的还是低地址的原创 2011-12-19 23:02:45 · 11872 阅读 · 11 评论 -
C语言嵌入式系统编程之软件架构篇
模块划分 模块划分的“划”是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论),C语言模块化程序设计需理解如下概念: (1) 模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明;转载 2011-11-16 21:12:27 · 7491 阅读 · 1 评论 -
如何提高阅读源代码的效率
如何提高阅读源代码的效率 记得在开源流行之前,我看过的代码紧限于所参与的项目,能有个几万行就不错哩。后来很多优秀开源项目都相继蹦出来了,阅读的代码量那叫一个大呀!不得不看。我现在掉到android这个大坑里,每天都要看很多源代码。以前做过J2EE,看Struts2、Lucene、OSWorkflow、iText等项目的源码,动机有三:文档不足、找问题的原因、好奇。转载 2011-10-19 22:01:44 · 4119 阅读 · 0 评论 -
华为软件编程规范学习(二)--注释
华为软件编程规范学习(二)--注释2-1:一般情况下,源程序有效注释量必须在20%以上 说明:注释的原则是有助于对程序的阅读理解,在该加的地方都加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。2-2:说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,原创 2013-05-05 09:26:05 · 5262 阅读 · 0 评论 -
华为软件编程规范学习(一)--排版
软件编程规范学习(一)--排版1-1:程序块要采用缩进风格编写,缩进的空格数为4个说明:对于由开发工具自动生成的代码可以有不一致。1-2:相对独立的程序块之间、变量说明之后必须加空行示例:如下例子不符合规范。int ni;if (!valid_ni(ni)){ ... // program code}repssn_ind = ssn_data[index].repssn_index原创 2013-05-05 08:59:52 · 5448 阅读 · 0 评论 -
C语言中的#,##
C语言中的#,## 今天在分析一份源码的时候遇到了如下代码:#define CASE(x,y) case x: _bsd_setlasterror(anApplInstance, BSD_ ## y); break觉得其中的##很有意思,于是就将这个知识点整理一下。#和##都是预处理指令,我们先看#。 #用来把参数转换成字符串,请看下面的两个例子。例子一:#include #include原创 2013-05-25 15:59:41 · 17690 阅读 · 5 评论 -
华为软件编程规范学习(十)--代码编辑、编译、审查
华为软件编程规范学习(十)--代码编辑、编译、审查10-1:打开编译器的所有告警开关对程序进行编译10-2:在产品软件(项目组)中,要统一编译开关选项10-3:通过代码走读及审查方式对代码进行检查说明:代码走读主要是对程序的编程风格如注释、命名等以及编程时易出错的内容进行检查,可由开发人员自己或开发人员交叉的方式进行;代码审查主要是对程序实现的功能及程序的稳定性、安全性、可靠性等进行检查及评审,可原创 2013-05-09 15:30:10 · 3593 阅读 · 0 评论 -
华为软件编程规范学习(九)--质量保证
华为软件编程规范学习(九)--质量保证9-1:在软件设计过程中构筑软件质量9-2:代码质量保证优先原则 (1)正确性,指程序要实现设计要求的功能。 (2)稳定性、安全性,指程序稳定、可靠、安全。 (3)可测试性,指程序要具有良好的可测试性。 (4)规范/可读性,指程序书写风格、命名规则等要符合规范。 (5)全局效率,指软件系统的整体效率。 (6)局部效率,指某个原创 2013-05-09 15:28:59 · 4172 阅读 · 0 评论 -
Source Insight中文注释间隔过大的解决办法
Source Insight中文注释间隔过大的解决办法 修改注释的字体即可,修改步骤如下:OPtion->Style Properties,在左边的Style Name中选中Comment,修改Font Name为自己想要的即可.点击Done退出.原创 2013-05-21 20:10:18 · 5428 阅读 · 0 评论 -
华为软件编程规范学习(八)--可测性
华为软件编程规范学习(八)--可测性8-1:编程时要经常注意代码的效率说明:代码效率分为全局效率、局部效率、时间效率及空间效率。全局效率是站在整个系统的角度上的系统效率;局部效率是站在模块或函数角度上的效率;时间效率是程序处理输入任务所需的时间长短;空间效率是程序所需内存空间,如机器代码空间大小、数据空间大小、栈空间大小等。8-2:在保证软件系统的正确性、稳定性、可读性及可测性的前提下,提高代码效原创 2013-05-06 23:34:33 · 2748 阅读 · 0 评论 -
华为软件编程规范学习(三)--标识符命名
华为软件编程规范学习(三)--标识符命名3-1:标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解 说明:较短的单词可通过去掉“元音”形成缩写;较长的单词可取单词的头几个字母形成缩写;一些单词有大家公认的缩写。示例:如下单词的缩写能够被大家基本认可。temp 可缩写为 tmp ;flag 可缩写为 flg ;statistic 可缩写为 s原创 2013-05-05 10:47:24 · 3898 阅读 · 0 评论 -
华为软件编程规范学习(六)--函数、过程
华为软件编程规范学习(六)--函数、过程6-1:对所调用函数的错误返回码要仔细、全面地处理6-2:明确函数功能,精确(而不是近似)地实现函数设计6-3:编写可重入函数时,应注意局部变量的使用(如编写C/C++语言的可重入函数时,应使用auto即缺省态局部变量或寄存器变量)说明:编写C/C++语言的可重入函数时,不应使用static局部变量,否则必须经过特殊处理,才能使函数具有可重入性。6-4:编写原创 2013-05-06 09:37:06 · 3621 阅读 · 0 评论 -
华为软件编程规范学习(七)--可测性
华为软件编程规范学习(七)--可测性7-1:在同一项目组或产品组内,要有一套统一的为集成测试与系统联调准备的调测开关及相应打印函数,并且要有详细的说明说明:本规则是针对项目组或产品组的。7-2:在同一项目组或产品组内,调测打印出的信息串的格式要有统一的形式。信息串中至少要有所在模块名(或源文件名)及行号说明:统一的调测信息格式便于集成测试。7-3:编程的同时要为单元测试选择恰当的测试点,并仔细构造原创 2013-05-05 23:12:41 · 4145 阅读 · 0 评论 -
华为软件编程规范学习(五)--变量、结构
华为软件编程规范学习(五)--变量、结构5-1:去掉没必要的公共变量说明:公共变量是增大模块间耦合的原因之一,故应减少没必要的公共变量以降低模块间的耦合度。5-2:仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系说明:在对变量声明的同时,应对其含义、作用及取值范围进行注释说明,同时若有必要还应说明与其它变量的关系。5-3:明确公共变量与操作此公共变量的函数或过程的关系,如访问、修改及原创 2013-05-05 16:59:25 · 3456 阅读 · 0 评论 -
华为软件编程规范学习(四)--可读性
华为软件编程规范学习(四)--可读性4-1:注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级说明:防止阅读程序时产生误解,防止因默认的优先级与设计思想不符而导致程序出错。示例:下列语句中的表达式word = (high if ((a | b)&& (a & c)) (2)if ((a | b) 如果书写为:high a | b && a& ca | b 由于原创 2013-05-05 12:24:23 · 3135 阅读 · 0 评论