精华内容
下载资源
问答
  • 测试驱动的嵌入式C语言开发

    热门讨论 2014-04-28 09:49:34
    《测试驱动的嵌入式c语言开发》深入介绍如何把测试驱动的开发方法应用于嵌入式c语言开发,第一部分介绍了两个开源的测试框架,通过测试驱动开发方法开发第一个模块;第二部分深入介绍了与系统中其他模块进行交互的...
  • 深入介绍如何把测试驱动的开发方法应用于嵌入式C语言开发,第一部分介绍 了两个开源的测试框架,通过测试驱动开发方法开发第一个模块;第二部分深入介绍了与系统中其他模块进行 交互的代码的测试技术,如测试替身、...
  • 本书深入介绍如何把测试驱动的开发方法应用于嵌入式C语言开发,第一部分介绍了两个开源的测试框架,通过测试驱动开发方法开发第一个模块;第二部分深入介绍了与系统中其他模块进行交互的代码的测试技术,如测试替身...
  • 嵌入式C语言技术实战开发一书的源代码,可以下载阅览后再决定是否购买本书学习!
  • 本书将TDD技术应用于嵌入式开发,为...资源包含测试驱动嵌入式C语言开发的中英文版,翻译不明确的地方可以看英文原版。遗憾的是本书现在已停售,无法买到纸质书。小弟是实在没积分了,所以才要求1资源分,望各位见谅。
  • 嵌入式C语言系统开发代码优化研究.pdf
  • 本书由浅入深,从C语言的复习开始,然后讲述C语言如何与OOP相结合,接着从面向对象技术进入UML,最后教读者从实践应用出发,活用UML+OOPC开发流程,做好系统分析和架构设计,实现高质量的嵌入式软件系统。...
  • 测试驱动的嵌入式C语言开发读书笔记 1.测试驱动开发 瀑布模型的最后开发人员会乱作一团,而缩短开发周期是一种减少问题的方案 测试驱动开发(TDD)是一种增量式软件开发技术。 简单说明及在没有失败的单测前提下...

    测试驱动的嵌入式C语言开发读书笔记

    1.测试驱动开发


    瀑布模型的最后开发人员会乱作一团,而缩短开发周期是一种减少问题的方案

    测试驱动开发(TDD)是一种增量式软件开发技术。

    简单说明及在没有失败的单测前提下不写产品代码。测试要小且自动化。

    TDD操作步骤

    1. 增加一个小测试。
    2. 运行所有测试并期待新的测试失败,也可能压根编译不过。
    3. 为了让测试通过做一些小改动。
    4. 运行测试并期待测试通过。
    5. 重构,移除重复并改进代码的表达方式。

    针对嵌入式开发
    嵌入式开发者最常用的借口就是对于硬件的依赖。原则上对于硬件的依赖和对数据库的依赖看起来没什么两样。

    2.测试驱动开发的工具和约定


    Unity CppUTest
    四阶段模式

    • 建立:创建测试的前提条件
    • 运行:对系统进行操作
    • 验证:检查预期的输出
    • 拆卸:把被测系统恢复到测试前的初始状态

    3.开始一个C语言模块


    模块:一个完备的部分,有明确定义的接口,实现方式为ADT抽象数据类型
    单一实例模型:选用静态的只在.c文件中可见的变量,访问方法是通过.h中间的接口函数
    多实例模型:typedef struct CircularBufferStruct *CircularBuffer在头文件声明,数据成员的定义放在.c中

    1.TDD创建C模块需要用到的文件有:

    • 头文件:定义模块接口
    • 源文件:包含接口实现
    • 测试文件:包含测试用例
    • 模块初始化及清理函数

    2.写一个测试列表

    报酬递减原则:一旦写下几个测试,其他的会很容易想到。当进展很慢时,说明已经到达报酬递减的边缘,这是一个停止写测试列表转而测试驱动设计的好时机。

    3.写第一个测试
    通过编写LedDriver测试流程来体现如何实际操作TDD。

    1. 建立测试文件,放在与产品不同的目录下。
    2. 构建并编译运行测试,得到正确的输出。TEST_GROUP->TEST_CASE
    3. 让测试用例检查真正有用的东西。
    • 依赖注入
      TDD要求CUT[code under test]必须独立与硬件,因此在设计用例时需要考虑为驱动程序伪造环境,如上文中采用u16变量检查16个灯的状态.

    • 不要让编码跑在测试前面
      忍住不写已经知道的代码颇具挑战性,但是坚持让编码在测试后面这样的原则就能产生被全面测试过的代码。

    4.先测试接口再测试内部实现

    关注接口,意味着从外向内开发代码。测试作为接口的首个用户,从调用者的角度给出了开发代码的使用方式。

    案例总结:先增加一个测试用例,然后增加头文件接口声明,其次增加.c文件的函数骨架,最终进行函数骨架内容填充。

    5.增量式前进
    DTSTTCPW:先仿冒再建造
    保持小而专注的测试
    绿了之后即重构

    6.测试驱动开发者的状态机

    编译错误
    编译错误
    链接错误
    链接错误
    新测试失败
    编译通过单测试失败
    编译错误
    所有测试均通过
    所有测试均通过
    写不出更多测试了
    选择一个测试
    写出这个测试
    让测试可编译
    让测试可链接
    让测试通过
    重构让它合理
    完成

    7.测试要做到FIRST

    • Fast【快速的】
    • Isolated【独立的】
    • Repeatable【可重复的】
    • Self-verifying【自校验的】
    • Timely【及时的】

    4.一路测试直到完成


    当你发现自己已经在一个坑里,就不要再挖了吧!

    ### 5.嵌入式系统的TDD策略
    ### 6.是的但是

    展开全文
  • 嵌入式C语言系统开发在智能手机中的运用.pdf
  • 《测试驱动的嵌入式C语言开发》深入介绍如何把测试驱动的开发方法应用于嵌入式C语言开发,第一部分介绍了两个开源的测试框架,通过测试驱动开发方法开发第一个模块:第二部分深入介绍了与系统中其他模块进行交互的...
  • 本书深入介绍如何把测试驱动的开发方法应用于嵌入式 C 语言开发,第一部分介绍了两个 开源的测试框架,通过测试驱动开发方法开发第一个模块 ;第二部分深入介绍了与系统中其他 模块进行交互的代码的测试技术,如测试...
  • TDD(Test Drived Develop)即测试驱动开发,其是一种增量式软件开发技术。简单地说,就是先编写单元测试代码,并运行测试代码只有测试代码测试失败的情况下再去添加产品代码。且每次只编写一个功能的测试代码,...

            虽然开篇已经给出了介绍TDD的博文的链接,但这里为了保证内容的完整性,还是决定写一个介绍篇作为整个学习历程的开篇。

    • 什么是TDD

             TDD(Test Drived Develop)即测试驱动开发,其是一种增量式软件开发技术。简单地说,就是先编写单元测试代码,并运行测试代码只有测试代码测试失败的情况下再去添加产品代码。且每次只编写一个功能的测试代码,对应的测试的产品代码添加完成并测试通过后才进行下一个测试代码的编写。这种思想可以很快的发现问题、定位问题并解决问题(因为问题总是最新加入的代码引入的);相比于传统的编程方式"后期调试式编程"(Debug-Later Programming,DLP)先写完代码再测试,这样会使得问题发现点位慢,且很有可能修改一个BUG会引入新的BUG。

             按照TDD思路开发的代码可以在测试通过后,很容易进行代码的重构。通过重构构建易于理解/易于演化且易于我们自己和他人维护的代码,让工作变简单。

    • TDD的好处
    1.  产生的bug更少
    2. 调试时间更短
    3. 边际效应所带来的bug更少
    4. 精心构建的测试可以成为可执行且无歧义的文档
    5. 彻底、全面的回归测试给予我们信心(晚上睡得香、周末无担忧)
    6. 改善设计
    7. 对进度进行监控
    8. TDD不断地给开发者以成就感,你每写一点代码都会完成一些工作,同时你能很清楚它们是正确的。
    • 对于嵌入式开发的益处
    1.  在硬件可用前或者硬件很贵或者很稀少时,通过独立于硬件的方式校验产品代码,从而降低风险。
    2.  在开发环境中执行并移除bug,从而减少长时间的编译、链接和上传这样的循环的次数。
    3.  对于在目标硬件中既难发现有难修改的问题,可以减少调试的时间。
    4.  通过在测试中模型化硬件交互,使硬件/软件的交互彼此独立。
    5.  通过解开模块之间以及模块与硬件之间的耦合来改进软件设计。可测试的代码首先必须是模块化的。
    展开全文
  • 这是一份关于嵌入式C语言的教程,有助于C语言的提高,是pdf文档。 这是一份关于嵌入式C语言的教程,有助于C语言的提高,是pdf文档。 这是一份关于嵌入式C语言的教程,有助于C语言的提高,是pdf文档。
  • 本资源是个人写的一本书中的其中两章,仅供读者参考,如需购买,请上京东,淘宝,当当购买。
  • 嵌入式C语言实战开发详解(一)

    千次阅读 2017-12-26 04:25:58
    嵌入式C语言实战开发详解(一) http://blog.csdn.net/wzhcalex/article/details/51874149 一、概述 1、嵌入式开发中为什么选择C语言? 因为操作系统的内核都是使用的C语言,而且C语言也有...

    嵌入式C语言实战开发详解(一)

    http://blog.csdn.net/wzhcalex/article/details/51874149



    一、概述

    1、嵌入式开发中为什么选择C语言?

    因为操作系统的内核都是使用的C语言,而且C语言也有如下几个优点:

    (1)出色的移植性,能在多种不同体系结构的软/硬平台上运行(修改量越小,移植性越好);

    (2)简洁紧凑,使用灵活的语法机制,并能直接访问硬件(效率高);

    (3)很高的运行效率

    拓展:

    什么时候使用汇编什么时候使用C语言呢?(C VS 汇编)

    汇编是低级语言,不能实现复杂的功能,所以:

    当对硬件做初始化——汇编

    当对硬件做复杂操作——C语言


    面向过程处理机制 VS 面向对象处理机制(详情戳网址)

    http://blog.csdn.net/wzhcalex/article/details/51878170


    2、嵌入式开发中的地位:

    (1)嵌入式Linux应用软件开发工程设计;

    (2)嵌入式Linux驱动开发工程师;

    (3)嵌入式BSP开发工程师;

    (4)嵌入式Kernel(内核)开发工程师;


    3、精通C语言考核标准:

    (1)企业笔试题;

    (2)累积的代码量(强化编程训练)

    (3)良好的编码规范(华为的编码规范要求);

    (4)行业应用的项目经验;


    4、如何学习C语言(外功与内功兼修)

    (1)零基础学习经历过程(菜鸟如何修炼成老鸟)

    (2)算法在C语言开发

    (3)《C和指针》《C语言专家编程》《程序员的自我修养》《高质量C/C++编程》《编程之美》


    5、C语言的标准有哪些?

    K&RC、C89、C99、C11

    注:

    gcc支持的C89,部分兼容C99

    不同的编译器标准不一样

    很多编译器支持的是C89


    二、数据类型

    1、什么是数据类型?

    数据集合的划分,不同的数据类型对CPU的意义是不一样的。


    2、数据类型有哪些?



    3、左右法则

     右左法则:首先从最里面的圆括号内未定义的标识符开始阅读看起,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。

    企业笔试题:

    1、用变量a给出下列定义

    a) 一个整型数(An integer):int a;

    b) 一个指向整型数的指针(A pointer to an integer):int  *a;

    c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a

    pointer to an integer):int  **a;

    d) 一个有10个整型数的数组(An array of 10 integers):int a[10];

    e) 一个有 10 个指针的数组,该指针是指向一个整型数的(An array of 10

    pointers to integers):int  *a[10];

    f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers):

    int  (*a)[10];

    g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer

    to a function that takes an integer as an argument and returns an integer):

    int  (*a)(int);

    h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返

    回一个整型数( An array of ten pointers to functions that take an integer

    argument and return an integer ):  int   (*a[10])(int).


    2、int  *(*(*fpl)(int))[10];

    fpl:函数指针变量,该函数指针指向一个形参为int,返回值为数组指针,该数组指针指向一个整型指针;

       

         int  *(*(*arr[5])())();

    arr:函数指针数组,该数组里的元素指向一个形参为空,返回值为函数指针的函数,该函数指针指向一个形参为空,返回值为整型的指针。


         float (*(*b())[ ])();

    b:函数,形参为空,返回值为数组指针,该指针指向一个函数指针数组,该数组里的元素指向一个形参为空,返回值为float的函数。


         void* (*c)(char, int(*)());

    c:函数指针变量,该函数指针指向一个形参为char 、函数指针,返回值为void*,该函数指针的形参为空,返回值为int。


        void** (*d)(int *,char **(*)(char *,char **));

    d:函数指针变量,指向函数形参为char,函数指针,返回值为void **,该函数指针形参为 char*,char**,返回值为char**;


        float(*(*e[10])(int *))[5];

    e:函数指针数组,指向函数形参为 int *,返回值为数组指针,该数组元素指向float;


    4、隐式类型转化与强制类型转化:

    char < int < float < double  隐式类型转化(自动)


    代码示例:



    这就是隐式类型转换;


    强制类型转化:

    代码示例:




    上述代码中的char*就是强制类型转化


    5、数据类型的重要知识点:

    字节长度:

    bit;

    字节 = 8bit;

    半字 = 2个字节 = 16bit;

    字 = 4个字节 = 32;


    6、基本数据类型

    char                1个字节;

    short              2个字节;

    int                  4个字节;

    long               4个字节;

    float               4个字节;

    double           8个字节;

    long long       8个字节;

    代码查询:



    拓展:

    为什么任何类型的指针都是4字节?

    因为指针指向地址,地址长度都是固定的。而地址长度是由操作系统决定,如果操作系统是32位的,地址长度为4字节;如果操作系统是64位的,则地址长度为8字节。


    char 取值范围:

    无符号:0~255(2^8-1)

    有符号:-128~127

    有符号时:第一个为符号位:

    0为整数:0 000 0000 = 0; 0 111 1111 = 127;

    1为负数:负数时计算机保存补码

                    1 000 0000  取反加1  =  -128

                    1 111 1111  取反加1  = -1

    补码取反加1成原码


    例如:

    打印~2:常量都是有符号的:0 000 0010 

                                        取反:1 111 1101 负值

                                  取反加1:0 000 0011   =   -3


    代码举例:



    分析:-128   1 000 0000

            取反   1 111 1111 

            加1     0 111 1111   =  127


    企业笔试题:



    输出结果分析:

    有符号:i = 127  a[127] = -128

                  i = 128  a[128] = 127

                  ...

                  i = 255  a[255] = 0; 0 相当于‘\0’

                  strlen(a)统计到‘\0’跳出,共255个。

    无符号:i = 0   a[0] = 255;

                  i = 1   a[1] = 254;

                  ...

                  i = 255  a[255] = 0;

                  strlen(a)统计到‘\0’跳出,共255个。


    有符号与无符号数据的区别:

    实例解析:



    分析:

    有符号数和无符号数进行比较运算时(==、<、>、<=、>=)有符号数隐式转换成了无符号数(即底层的补码)但是此数从有符号数变成了无符号数。


    7、sizeof与strlen区别(详情请戳网址):

    http://blog.csdn.net/wzhcalex/article/details/51852632

                                                     

    8、变量与常量

    变量三大特点:

    变量的数据类型:主要说明变量占用的内存空间的大小,如 int型;

    变量的作用域:变量的有效性范围,如变量的使用范围;

    变量的存储类别:变量在内存中的存储方式,不同的存储方式影响变量在内存中的生存周期。



    MMU:虚拟地址单元 解决内存资源稀缺问题

    (打印一个地址:打印的都是虚拟的地址)


    为了保护数据的安全,操作系统会对空间做划分:


    栈空间:局部变量、函数形参、自动变量(调用后释放)

        特点:先进后出,管理权限:系统

    堆空间:malloc、ralloc、calloc 分配空间

        特点:先进先出,管理权限:用户

    数据段:bss:保存未初始化的全局变量

                  rodata:常量

                  .data(静态数据区):全局变量(程序结束后释放)、static 修饰变量

    全局变量与局部变量的区别:

    (主要从空间的分配,没有初始化的值 什么时候释放等角度入手)


    9、声明与定义:

    声明:不分配内存空间,可以声明多次;

    定义:分配内存空间,只可以定义一次。


    变量的声明有两种情况:

    定义性声明:需要建立存储空间的,例如:int a在声明时就已经建立了存储空间;

    引用性声明:不需要建立存储空间, 例如:extern int a 其中变量a是在别的文件中定义的。


    10、格式化输出与输入:

    首先,通过代码来示例以下不同的数据类型的不同的输入输出方法:

    [html]  view plain  copy
    1. #include<stdio.h>  
    2.   
    3. int main()  
    4. {  
    5.     int i;  
    6.   
    7.     int num;  
    8.   
    9.     char ch;  
    10.   
    11.     float f_num;  
    12.   
    13.     double d_num;  
    14.   
    15.     int a[3];  
    16.   
    17.     char src[100];  
    18.   
    19.     scanf("%d",&num);  
    20.     printf("num = %d\n",num);  
    21.   
    22.     getchar();  
    23.     scanf("%c",&ch);  
    24.     printf("ch = %c\n",ch);  
    25.   
    26.     scanf("%f",&f_num);  
    27.     printf("f_num = %f\n",f_num);  
    28.   
    29.     scanf("%lf",&d_num);  
    30.     printf("d_num = %lf\n",d_num);  
    31.   
    32.     printf("please input a[3]:\n");  
    33.     for(i = 0; i < 3; i++)  
    34.     {  
    35.         scanf("%d",&a[i]);  
    36.     }  
    37.     for(i = 0; i < 3; i++)  
    38.     {  
    39.         printf("a[%d] = %d\n",i,a[i]);  
    40.     }  
    41.   
    42.     scanf("%s",src);  
    43.     printf("src[100] = %s\n",src);  
    44.   
    45.     return 0;  
    46. }  
    运行结果:



    在获取字符是用一个getchar()清空缓存区

    以下是getchar()的作用(转自网络)

    1.从缓冲区读走一个字符,相当于清除缓冲区  

    2.前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把

    这个回车符取走的话,gets()就不会等待从键盘键入字符,而是会直接取走这个“无用的”回车符,从而导致读取有误 

    3. getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab) getchar()使用不方便,解决方法:  

    (1)使用下面的语句清除回车:  while(getchar()!='\n');  

    2)用getche()或getch()代替getchar(),其作用是从键盘读入一个字符(不用按回车),注意要包含头文件<conio.h>


    三种获得字符串的方法:scanf    gets     getchar

    scanf 与 gets 的区别(以下转自网络):

    gets(s)函数与 scanf("%s",&s) 相似,但不完全相同,使用scanf("%s",&s) 函数输入字符串时存在一个问题,就是如果输入了空格会认

    为字符串结束,空格后的字符将作为下一个输入项处理,但gets()函数将接收输入的整个字符串直到遇到换行为止。  

     1.scanf()  所在头文件:stdio.h  

    语法:scanf("格式控制字符串",变量地址列表);  

    接受字符串时:scanf("%s",字符数组名或指针);  

    2.gets()  所在头文件:stdio.h  

    语法:gets(字符数组名或指针); 

     两者在接受字符串时:  

    1.不同点:  scanf不能接受空格、制表符Tab、回车等;  而gets能够接受空格、制表符Tab和回车等;  

    2.相同点:  字符串接受结束后自动加'\0'。


    使用gets获取字符串代码:

    [html]  view plain  copy
    1. #include<stdio.h>  
    2.   
    3. int main()  
    4. {  
    5.     char src[100];  
    6.   
    7.     printf("input a string:");  
    8.     gets(src);  
    9.   
    10.     printf("src = %s\n",src);  
    11.   
    12.   
    13.     return 0;  
    14. }  


    使用getchar()获取字符串:

    [html]  view plain  copy
    1. #include<stdio.h>  
    2.   
    3. int main()  
    4. {  
    5.     char ch;  
    6.     char src[10];  
    7.   
    8.     int i = 0;  
    9.   
    10.     while((ch = getchar()) != '\n')  
    11.     {  
    12.         src[i] = ch;  
    13.     i++;  
    14.   
    15.     if(i == 9)  
    16.     {  
    17.          printf("error!\n");  
    18.          exit(1);  
    19.     }  
    20.   
    21.     src[i] = '\0';  
    22.       
    23.     }  
    24.   
    25.     return 0;  
    26. }  



    如何让scanf不遇到空格结束呢?

    在%前面加空格 

    详情请戳网址:http://blog.csdn.net/mishifangxiangdefeng/article/details/7163002

    (技术大牛写的帖)


    获取数组方法:

    1、

    [html]  view plain  copy
    1. #include<stdio.h>  
    2.   
    3. int main()  
    4. {  
    5.     int a[3];  
    6.     int i;  
    7.     int *p = a;  
    8.   
    9.     for(i = 0; i <= 2; i++)  
    10.     {  
    11.         scanf("%d",p++);  
    12.     }  
    13.   
    14.     p = a;  
    15.   
    16.     for(i = 0;i < 3; i++)  
    17.     {  
    18.         printf("a[%d] = %d\n",i,*(p + i));  
    19.     }  
    20.           
    21.     return 0;  
    22.   
    23. }  
    [html]  view plain  copy
    1. </pre><pre name="code" class="html">2、  
    [html]  view plain  copy
    1. #include<stdio.h>  
    2.   
    3. int main()  
    4. {  
    5.     int a[3];  
    6.     int i;  
    7.       
    8.     for(i = 0; i <= 2; i++)  
    9.     {  
    10.         scanf("%d",&a[i]);  
    11.     }  
    12.   
    13.     p = a;  
    14.   
    15.     for(i = 0;i < 3; i++)  
    16.     {  
    17.         printf("a[%d] = %d\n",i,a[i]);  
    18.     }  
    19.           
    20.     return 0;  
    21.   
    22. }  
    3、

    [html]  view plain  copy
    1. #include<stdio.h>  
    2.   
    3. int main()  
    4. {  
    5.     int a[3];  
    6.     int i;  
    7.      
    8.     for(i = 0; i <= 2; i++)  
    9.     {  
    10.         scanf("%d",a+i);  
    11.     }  
    12.   
    13.     p = a;  
    14.   
    15.     for(i = 0;i < 3; i++)  
    16.     {  
    17.         printf("a[%d] = %d\n",i,*(a + i));  
    18.     }  
    19.           
    20.     return 0;  
    21.   
    22. }  

    第一版本代码中
    [html]  view plain  copy
    1. scanf("%d",p++);  

    不可以用a++ 是因为a是常量不可以自加,*p = a 指针可以自加 p++


    printf是行缓冲,我们用以下代码验证:

    1、




    2、




    3、




    4、




    展开全文
  • 嵌入式C语言技术实战开发书籍正式出版(2018年6月)

    千次阅读 热门讨论 2017-05-09 00:03:35
    最近收到了不少伙伴的询问,问我书出版了没有,是的,已经出版了,目前正在预售阶段,不过本周陆续会进行发货。京东,淘宝,当当等各大卖书的渠道都开始售卖,要赞助就多多赞助我吧,如果赞助不起就等完全免费的pdf...

        最近收到了不少伙伴的询问,问我书出版了没有,是的,已经出版了,目前正在预售阶段,不过本周陆续会进行发货。京东,淘宝,当当等各大卖书的渠道都开始售卖,要赞助就多多赞助我吧,如果赞助不起就等完全免费的pdf书籍,可能需要一些时间,不过我会放一些样章公布出来,总之谢谢各位朋友的捧场。

         电子版样章(草稿1-2章节,未经出版社修改)下载链接:点击打开链接

         本书源代码共享:https://download.csdn.net/download/morixinguan/10605784

         也可以参考之前上传的一个资源:https://download.csdn.net/download/morixinguan/9757310

         如需支持作者,请购买原书,购买链接附下。

         读者QQ交流群:

         

     

         购买链接:

         京东蓝墨水图书专营店:https://item.jd.com/28686783068.html

         京东自营:https://item.jd.com/12369786.html

         天猫: 

         https://detail.tmall.com/item.htm?spm=a230r.1.14.20.1c91abdcxG4WjZ&id=570427117463&ns=1&abbucket=6

          当当网:

         http://product.dangdang.com/25281580.html

        哪个便宜就买哪个噢~~

        

    目录如下:

    顺便打个广告,这是我们自家经销的唇膏,纯天然无公害,如果有需要欢迎微信抢购,谢谢大家!

    展开全文
  • 嵌入式C语言知识总结

    2021-07-22 10:46:55
    在这么多年的嵌入式开发中,我也积累了一些这方面的经验和思考,就希望总结下来,系统的阐述嵌入式C语言的重要知识点,就是这篇文章的由来。本文以自己在嵌入式上的实践为基础,在结合相关资料, 阐述嵌入式需要了解...
  • 嵌入式C语言代码优化的研究.pdf
  • 嵌入式C语言实验教学方法探讨.pdf
  • 本文将详尽阐述基于模式的静态代码分析、运行时内存错误检测、单元测试以及数据流分析等自动化技术共同使用时是如何查找出嵌入式C语言程序/软件中的缺陷的。本文中将以Parasoft C++test为例来演示上述各项技术。C++...
  • 标题《嵌入式C语言》 --最具价值的嵌入式C语言 #1 C语言简介 C语言是国际上广泛流行的高级语言,是在B语言的基础上发展起来的, 1970年, 美国贝尔实验室的D.M.Ritchie设计了B 语言, 并用于编写了第一个UNIX操作...
  • 嵌入式C语言浮点数到字符数组转换.pdf
  • 嵌入式C语言单元测试的初步研究.pdf
  • 嵌入式C语言程序设计中的代码优化.pdf
  • 嵌入式C语言在高校教学中的探讨.pdf
  • 高职嵌入式C语言程序设计课程教学研究.pdf
  • 基于Proteus的嵌入式C语言学习装置设计.pdf
  • 下面讲解下嵌入式C语言程序设计基础,尤其是C语言的一些语言特点。 C语言是一种结构化的程序设计语言,它的优点是运行速度快、编译效率高、移植性好和可读性强。C语言具有简单的语法结构和强大的处理功能,并可方便...
  • 安全苛求系统下的嵌入式C语言程序调试技巧.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,375
精华内容 11,350
关键字:

嵌入式c语言开发技术

c语言 订阅