自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jonah_king的博客

嵌入式 C语言 ,模块化

  • 博客(39)
  • 收藏
  • 关注

原创 整体大于部分之和

用来写功能说明

2019-03-07 10:28:52 2567

原创 程序属性——程序可读性(1)符号与实体

读过很多人的程序,开源的,自己公司内部的。基本来说,开源通用的程序,可读性一般都写得比较强,当然程序的可也有写得很差的。在程序的几个属读,可读性绝对应该放在第一位。因为其他后续属性,都必须 建立在这个属性之上。我们既然使用xx语言编程,那么语言自然是给人使用的,因为机器只需要使用二进制就行了。所以这里我们首先需要从语言本身去谈。这就回到了我们软件哲学里来了,1、我们要表...

2018-12-07 09:37:16 695

原创 软件与哲学(5)——我们如何认识软件“实体”

前面的文章中,我们已经讨论过了,实体的概念。这篇文章主要用来谈论一下,我们如何认识一个软件实体。 在哲学上,我们认识一个“实体”的途径主要有以下四种: 1、猜想2、经验(归纳)3、推理 (演绎)4、顿悟 着上面的四种途径,其实也是按照认知顺序排列的。 人类最初认识世界的方式,其实就是靠猜想,猜测这是世界是什么样子的,猜测这个世界有什么规律。比如说...

2018-11-13 07:32:05 999

原创 软件与哲学(2)——对不同世界的抽象

  哲学,通俗意义上来讲,是为了阐述我们所生活的世界的本原(本原论),以及我们是如何能够认识这个世界的(认识论)。所以,这个世界上,就产生了各种各样不同的哲学思想,他们都用自己的哲学理论来描述这个世界,直到人们对这个世界的描述越来越精确,越来越细致,我们不得不从哲学中分离出,逻辑学,医学,艺术,物理,数学,化学......   有一些哲学思想,经过了绝大多数人的认可,于是就形成了,我们...

2018-11-11 16:49:31 318

原创 软件与哲学(1)——为什么会有这个系列

   第一次听说,软件设计中,应该利用哲学的思想,实在工作第三年的时候。   当时是一个技术上的领导,找我谈话,讨论软件的问题。  就提醒我说,咱们公司的软件设计专家,在设计软件的时候,都会使用哲学思想。 当时的我,对这种说法,是相当鄙视的。  因为我觉得,软件就是软件,哲学就是哲学,不能为了炫耀自己的水平,就强说自己设计的软件和哲学有关系。  其实再此前的一段期间里,自己的信仰,也几...

2018-11-11 16:31:32 714

原创 软件与哲学(4)——对实体的抽象——什么是真正的实体

 在希腊哲学中,最著名的莫过于柏拉图和亚里士多德师徒了。相信很多程序员们听说过这两位的名字,却并不了解他们。  先简单描述一下柏拉图和亚里士多德的哲学思想。  在柏拉图的观念中,真正存在于世界上的实体,并不是我们眼睛所看见的东西。 真正存在的,是我们内心里面的观念,我们要首先唤醒了自己内心深处的关于“实体”的观念,然后再使用这个观念才能认知世界。 而亚里士多德却认为...

2018-11-11 16:15:59 1232

原创 软件与哲学(3)——讨论“实体”的前提

在我们讨论问题的过程中,特别是对于问题又争执的时候,我们绝大多数人都会忽视掉一个问题,我们大家对于所谈论的“实体”的理解是不是一致的。 哲学概念中,一个客观存在的物体,我们称之为 “实体”。而我们讨论实体时,其实我们内心是默认了以下三个前提的:1、这个客观的实体是存在的。@jonah_king2、这个实体是有规律的,并且可以被我们认识。3、我们不但可以认识这个实体,我们...

2018-11-06 20:25:01 290

原创 软件与哲学——奥卡姆的剃刀(如无必要,勿增实体)

奥卡姆哲学

2018-10-18 15:46:40 484

原创 C语言32个关键字_妙用法则

C语言是一门相对灵活的语言,下面列举一些常用套路:1、共同体+位域 用来表示通讯数据,方便程序的书写和可读性。(位域的风险问题,通过单元测试弥补)2、单片机操作寄存器时,有位域使用位域,没有位域,使用(逻辑运算符+移位运算符),增加可读性和可维护性。3、...

2018-10-18 15:45:46 303

原创 软件与哲学——知识的定义(空地上的奶牛)

哲学十大问题中,有一个很经典的讨论,叫空地上的奶牛。 空地上的奶牛,讨论的其实是知识的定义的问题。 说起来,真知识的定义,是有以下三个部分共同组成的。1、正确的前提。2、合理的逻辑推理。3、正确的答案输出。 其实,这和软件的编写时一样的,针对任何一个软件模块,我们都可以把这个模块当做一个知识。模块与知识的对应关系如下正确的前提            &l...

2018-10-18 15:30:44 1027

原创 软件与哲学——对实体的抽象(2)实体概念的范围

在我们讨论问题的过程中,特别是对于问题又争执的时候,我们绝大多数人都会忽视掉一个问题,我们大家对于所谈论的“实体”的理解是不是一致的。 哲学概念中,一个客观存在的物体,我们称之为 “实体”。而我们讨论实体时,其实我们内心是默认了一下三个前提:1、这个客观的实体是存在的。2、这个实体是有规律的,并且可以被我们认识。3、我们不但可以认识这个实体,我们还可以接着语言准确的描述...

2018-10-18 15:28:48 661

原创 嵌入式软件的高端方向

嵌入式软件 与 计算机软件的关键差异就是 嵌入式软件的专用型很强,对平台的依赖性比较大。嵌入式软件的可见性很差,如果没有界面系统,那嵌入式软件的运行机理和过程就是相当难把握的。 正是由于以上两点的特殊性,造成了嵌入式软件行业内的两个高端方向。 算法方向: 嵌入式软件算法的通用性比较差,所以针对特定的仪器,需要专用的算法进行处理。这样,能精通相应算法的就会成为专业内的精英...

2018-10-16 10:28:36 610

原创 单片机程序运行在哪里

想必,很多人会对这个问题有困惑?单片机运行的时候,是运行在哪里? FLASH(ROM)?还是RAM。这就需要我们了解上一篇的内容,单片机的运行视图和加载视图@jonah_king。我们程序的运行其实是由多种方式的,不过一般常见的有两种。运行在ROM里的和运行在RAM里的。一般比较小的系统,也就是说,单片机本身内部就有FLASH的。这种FLASH不同于通用的FLASH,他是支持随机地址访问...

2018-10-12 19:02:29 8753 1

原创 单片机的启动过程(从上电到main)

发生

2017-08-03 20:16:43 17187

原创 README

后面的文章会分按照以下章节进行,基本上按照顺序进行,前面一章是后面一章的基础,彼此会有交叉,希望大家可以认真看完。1、单片机的相关知识 你了不了解什么是运行试图和加载视图,main之前的启动代码究竟做了那么事情,编译器的选项做了哪些事情?1、C语言的的基础知识    unsigned char const *p;const unsigned char* p;unsi

2017-07-28 10:51:50 278

原创 运行视图和加载视图

单片机的基础知识

2017-07-28 10:18:01 2206

原创 单片机的存储空间

单片机从硬件上来说,只有两种空间:ROM和RAM!再说一遍,只有ROM和RAM!再说一遍,只有ROM和RAM!也就是说,你程序里的所有东西,不是放在RAM里,就是放在ROM里。ROM的属性是read only(只读),只能用来读取,无法修改,其实也可以修改,只是需要特殊方法,这里暂时不谈!RAM的属性是read+write(可读可写)ROM和RAM区域有可能是间断的,分...

2017-07-28 09:03:07 5818 1

原创 圈复杂度

一、圈复杂度的概念           是度量软件复杂程度的一个指标,这篇文章介绍的很好:http://blog.csdn.net/wangpeng198688/article/details/50434684 就是图片没法看            嵌入式程序中所说的圈复杂度,都是之函数的复杂度,是以函数为度量的基本单位。二、圈复杂度的影响         (1)、复杂度大,难以阅

2017-07-27 17:43:16 1185

原创 C语言的运算符

我觉得开篇需要声明两点:1、对于阅读别人的程序,关于运算符优先级的,打印一张优先级表,自己去核对,究竟是个什么样的运算顺序。2、对于自己的程序,如果你不确定优先级,那么就多加括号,多加括号知道不。对于像  a = a+++++a;究竟等于几的问题? 我劝你趁早放弃吧,C语言里面有很多更重要更有价值的事情去做,不要在这个上浪费时间了。碰见这样的代码,那

2017-07-27 17:17:25 179

原创 C语言32个关键字_if else do while sizeof volatile

if else 无do while 无    有时候会配合#define使用 就是防止#define是展开,防止展开时控制逻辑乱了。sizeof 就是计算变量的大小。volatile  就是防止变量被优化,觉得危险,能用就用!

2017-07-27 17:16:27 330

原创 C语言32个关键字_typedef

网上讲解typedef 的东西太多了,而且好多都是和#define放在一起讲。我只想说,那纯粹是误导,是误导啊,typedef 跟#define没有半毛钱关系。typedef 跟#define没有半毛钱关系。typedef 跟#define没有半毛钱关系,不要做类比好吧typedef 是什么,是定义了一个数据类型,再说一遍,是定义了一

2017-07-27 17:14:38 186

原创 C语言32个关键字_复杂数据类型

C语言的复杂数据类型包括指针数组结构体共同体枚举其中指针类型的详解见:http://blog.csdn.net/soonfly/article/details/51131141数组 详解见 http://c.biancheng.net/cpp/u/c7/结构体 详解http://c.biancheng.net/cpp/

2017-07-27 17:13:41 588

原创 c语言32个关键字_数据类型

shortintlongfloatdoublecharunsignedsignedvoid 这个我也不知道该讲些什么, 放图!

2017-07-27 17:12:45 376

原创 C语言32个关键字_continue,break,return

continue跳出本次循环,开始下次循环MISRA规则14.5(强制): 不应使用continue 语句。break跳出本层循环。规则14.6(强制): 对任何迭代语句至多只应有一条break 语句用于循环的结束。return 是应用于函数退出的,直接跳出函数。

2017-07-27 16:48:46 479

原创 C语言32个关键字_switch,case break,default

C语言还提供了另一种用于多分支选择的switch语句, 其一般形式为:switch(表达式){     case 1:  语句1;break;    case 2:  语句2;break;    case 3...8:语句x;break;    default:  语句n+1;break;}其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与

2017-07-27 16:48:04 1646

原创 c语言32个关键字_enum

在实际应用中,有的变量只有几种可能取值。例如人的性别只有两种可能取值,星期只有七种可能取值。所谓枚举是指将变量的值一一列举出来,变量只限于列举出来的值的范围内取值。 赋值其他数据编译器会报错,会报错。通俗一点说: 枚举就是你的那个变量就那么几种状态,不会出现别的,而且你也不想被五一修改,那么就定义为枚举好了。状态机的状态,用这个表示最合适不过了。

2017-07-27 16:47:19 639

原创 c语言32个关键字_define

1 、防止一个头文件被重复包含当我们的程序很大很大时,比如超过20000行时,我们很可能没有办法对所有的文件都有清楚的了解,特别是.h文件,那么我们怎么做才能避免include时重复包含呢 答案就是#define如下:a.h  b.h  c.h 三个文件a.h 内容           int variable_a;b.h 内容 

2017-07-27 16:46:22 861 1

原创 C语言32个关键字_goto

C语言32个关键字中,强烈不推荐goto使用。C语言中,关于goto的论战是比较少的,一般90%的人都同意能不用goto的地方,就不要用goto。虽然goto语句在linux代码中出现很多次,但是我个人觉得那都是当年使用汇编造成的后果,现在基本都没怎么用goto了。goto语句也称为无条件转移语句,其一般格式如下: goto 语句标号; 

2017-07-27 16:45:38 2649

原创 c语言32个关键字_强制法则

第一章把static 和 const写在最前面,是因为这两个关键字,属于强制法则,再说一遍这两个关键字属于强制法则。所谓强制法则,就是凡是你能用这两个关键字的地方,就尽量使用这两个关键字,再说一遍,凡是你能用这两个关键字的地方,就尽量使用这两个关键字。绝不嫌多!切记切记,因为static涉及模块化编程,而const涉及防御性编程。这两个关键字

2017-07-27 16:44:23 261

原创 C语言32个关键字_const

const  我们称之为常量修饰符,意即其所修饰的对象为常量(immutable)。我们来分情况看语法上它该如何被使用。1、函数体内修饰局部变量。例:void func(){const int a=0;}首先,我们先把const这个单词忽略不看,那么a是一个int类型的局部自动变量,我们给它赋予初始值0。然后再看const.

2017-07-27 16:43:15 224

原创 C语言32个关键字_作用域修饰符

变量的存储方式可分为“静态存储”和“动态存储”两种。静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配,调用函数完毕立即释放。如果一个函数被多次调用,则反复地分配、释放形参变量的存

2017-07-27 16:41:50 449

原创 C语言32个关键字_static

static 可以修饰变量和函数, 说白了就是修饰作用域,就是修饰作用域,就是修饰作用域。static的作用,是为了模块化设计而成立的,因为static的作用限定了变量或者函数能够被访问的作用域。static 修饰函数 函数的访问范围就被限定在本文件以内,任何本文件以外内容的访问此函数,都是非法和无效的,编译不会通过,提示找不到该符号。 所以,我们在进行一个函数设计的时候,

2017-07-27 16:33:04 212

原创 C语言32个关键字

​关键字说明auto声明自动变量short声明短整型变量或函数int声明整型变量或函数long声明长整型变量或函数float声明浮点型变量或函数double声明双精度变量或函数char声明字符型变量或函数struct声明结构体变量或函数unio

2017-07-27 16:30:26 163

原创 降低耦合的方法

通过前面的的耦合关系分析我们可以知道,耦合的严重度按照以下顺序递增非直接耦合 所以我们可以根据需要传递的类型,优先选用适当的耦合方式。例如 : 需要访问另外模块的一个数据,我们可以有以下几种方式:1、将此变量设置为全局变量,涉及外部耦合。2、将此变量设置为模块的输入状态,涉及数据耦合。很明显,方式2要比方式1的耦合度要低。

2017-07-26 14:12:24 2418 1

原创 软件耦合度的计算公式

我们总得找出一种计算方法来计算模块耦合的程度,一般采用以下的公式: (1)di: 输入数据参数的个数 (2)ci: 输入控制参数的个数

2017-07-26 11:23:34 17981 1

原创 嵌入式软件开发协助工具

代码圈复杂度测量工具  SourceMonitor代码静态分析工具           Pclint,Splint代码动态测试工具          Cunit Tessy代码阅读分析工具          SCI Understand测试用例工具                  Cunit tessy

2017-07-26 06:59:53 406

原创 软件耦合的度量和降低

一、软件耦合的定义: 个人觉得软件耦合,是用来判断一个模块(功能,野可以简单理解为一个xx.c文件)与其他模块之间的耦合联系的,通过理论分析我们可以确定出两个模块之间的必须耦合元素有哪些,然后由于C语言@jonah_king的灵活性,我们必须选择出最合适的耦合方式。 耦合按照标准的定义一共分为以下7个类别:1、内容耦合内容耦合是最高程度的耦合如果出现下列情况之一,两个模...

2017-07-24 14:23:59 585 1

原创 程序的属性

为了全面方便的描述一个程序,我们定义了以下属性。 1、功能完整性:程序满足合理需求的反应。 2、强壮型 : 程序面对不合理需求的属性。 3、可读性 :编写复杂的程序并不难,难得是理解复杂的程序。 4、可维护性:后期扩展和修改是否方便,与可读性和耦合度都有联系。 5、可测试性: 这个和圈复杂度的关系特别大,基本由圈复杂度决定。 6、可移植...

2017-07-24 11:54:10 1041

原创 芯片的工作原理

芯片是怎么运行的很多人不明白,为什么电脑上的程序,下载到了芯片里,芯片就可以按照用户所设定的逻辑运行起来了。其实芯片跟外界连接的途径只有一种,那就是引脚。而所谓的引脚也不过是两种功能,一种是输入,用来监控外界的状态,一种是输出,用来操控外界。无论是外部中断,还是串口接收…..都是输入的一种特殊状态, 而无论是串口输出,PWM…. 也都只不过是输出的一种特殊形式而已。芯片的的核心是晶圆,晶圆就是一

2016-09-02 07:17:53 31535 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除