C++
1、嵌入式C实战训练,在实战中提升嵌入式技能;
2、C++进阶与实战
3、嵌入式RTOS;
4、嵌入式系统;
勇往直前的进击
明日复明日,明日何其多。
我生待明日,万事成蹉跎 。
展开
-
如果编程语言是一门武功绝学,那么汇编、C语言······(转载)
学习编程与武功绝学武侠小说中,各路侠客绿林好汉都是从基本功开始一招一式学起,掌握了足够多的招式后,加之勤学苦练,量变引起质变,会有一天打开任督二脉顿悟出这些招式背后的哲学逻辑,成为一代宗师。在编程的学习过程中,我们何尝不是从一招一式的函数、语法、特性等学起,掌握了一门编程语言后,再学习另一门语言就会快很多,如同拥有内功后,习得其他武功也会轻松很多。如果编程语言是一门武功绝学,各语言分别是哪门武功绝学呢?汇编语言汇编语言 - 易筋经汇编语言是计算机提供给用户的最快最有效的语言,也是能够利用原创 2021-07-25 16:11:15 · 353 阅读 · 0 评论 -
c++运算符的重载习题答案
1.概念填空题1.1运算符重载是对已有的运算符赋予多重含义,使同一个运算符在作用于不同类型对象时导致不同的行为。运算符重载的实质是函数重载,是类的多态性特征。1.2可以定义一种特殊的类型转换函数,将类的对象转换成基本数据类型的数据。但是这种类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数。类类型转换函数既没有参数,也不显式给出返回类型。类类型函数中必须有return 表达式的语句返回函数值。一个类可以定义多个类类型转换函数。1.3运算...原创 2020-07-16 10:44:10 · 2452 阅读 · 0 评论 -
Makefile
在Makefile规则中,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的用法是:$(wildcard PATTERN...) 。在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空。需要注意的是:这种情况下规则中通配符的展原创 2017-04-10 18:09:34 · 328 阅读 · 0 评论 -
assert
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息, 然后通过调用 abort 来终止程序运行。 请看下面的程序清单badptr.c:转载 2017-04-10 18:44:14 · 5948 阅读 · 0 评论 -
C C++重载机制
时常在cpp的代码之中看到这样的代码:#ifdef__cplusplus extern "C" { #endif//一段代码#ifdef__cplusplus } #endif 这样的代码到底是什么意思呢?首先,__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,转载 2017-04-01 19:00:52 · 600 阅读 · 0 评论 -
排序
快速排序 STATIC UINT sort_Partition(IN INT *piData, IN INT iLeft, IN INT iRight){ INT iKey = piData[iLeft]; /* 取第一个数为分割界限值 */ while (iLeft { while ((piData[iRight] >= iKey转载 2017-04-01 19:02:05 · 350 阅读 · 0 评论 -
运算符的优先级
运算符的优先级(由高到低)优先级 描述 运算符1.括号() []2.正负号 + -3.自增自减非 ++ -- !4.乘除取余 */%5.加减 + -6.移位运算 >7.大小关系 > =8.相等关系 = !=9.按位与 &10.按位异或 ^11.按位或 |12.逻辑与 &&13.逻辑或 ||14.条件运算?:15.赋值运算 = += -原创 2017-03-16 20:21:34 · 2280 阅读 · 0 评论 -
空指针与void指针的区别
1.空指针:不指向任何对象,值是NULL。NULL是在中定义的一个宏,它的值和任何有效指针的值都不同。NULL是一个纯粹的0,有可能被强制转换成void*或char*类型。用空指针作函数调用失败时的返回值。2.void指针:通用指针或泛指针。指向某个对象,但该对象不属于任何类型。任何时候都可以用其他类型的指针代替void指针或用void指针来代替替他类型的指针,并且不需要进行强制转换。原创 2017-03-16 20:30:52 · 1082 阅读 · 0 评论 -
运算符的优先级(由高到低)
运算符的优先级(由高到低)优先级 描述 运算符1.括号() []2.正负号 + -3.自增自减非 ++ -- !4.乘除取余 */%5.加减 + -6.移位运算 >7.大小关系 > =8.相等关系 = !=9.按位与 &10.按位异或 ^11.按位或 |12.逻辑与 &&13.逻辑或 ||14.条件运算?:15.赋值运算 = += -原创 2017-03-16 20:31:55 · 34676 阅读 · 0 评论 -
条件编译
条件编译:#if expression Statement sequence#elifexpression1 Statement sequence1#elifexpression2 Statement sequence2. . . . . . #elifexpressionN Statement sequ原创 2017-03-16 20:41:34 · 502 阅读 · 0 评论 -
C语言常用宏总结
1,防止一个头文件被重复包含#ifndef COMDEF_H#define COMDEF_H#endif 2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。typedef unsignedchar boolean; /*Boolean value type. */typedef unsigned lon原创 2017-03-16 20:43:46 · 429 阅读 · 0 评论 -
C语言零碎知识点
1.编译预处理2.宏定义:标识符代替字符串;分为有参数和无参数3.#undef:删除前面定义的宏的名字。4.无参宏:宏名后不带参数,一般形式:#define 标识符 字符串 ①宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号一起置换;②宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令;③宏名在源程序中若用引号括起来,则原创 2017-03-16 20:45:14 · 390 阅读 · 0 评论 -
关于...的使用
...在C宏中称为Variadic Macro,也就是变参宏。比如: #define myprintf(templt,...)fprintf(stderr,templt,__VA_ARGS__)// 或者#define myprintf(templt,args...)fprintf(stderr,templt,args)第一个宏中由于没有对变参起名,我们用默认的宏__VA_ARGS原创 2017-03-16 20:55:41 · 286 阅读 · 0 评论 -
关于#和##
在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏: #defineWARN_IF(EXP) \ do{ if(EXP) \ fprintf(stderr, "Warning: " #EXP原创 2017-03-16 20:57:11 · 373 阅读 · 0 评论 -
Float Vs Double
Float Vs Double1. 范围 float和double的范围是由指数的位数来决定的。 float的指数位有8位,而double的指数位有11位,分布如下: float: 1bit(符号位) 8bits(指数位) 23bits(尾数位) double: 1bit(符号位) 11bits(指数位) 52bits(尾数位) 于是,float的原创 2017-04-26 18:51:44 · 419 阅读 · 0 评论 -
杂乱
C++ Hello World程序解释注释风格//是C++的注释行标志C++还兼容了/* …*/的C风格注释用#if 0 ... #endif 来去掉大段的代码C++ Hello World程序解释main函数的参数main()带两个参数: argc 和argvargc给出传递给程序的实参的个数argv 是实际的运行参数 *argv[0] 是 程序名原创 2017-04-08 19:46:58 · 338 阅读 · 0 评论 -
C语言头文件
头文件由三部分内容组成:1.头文件开头处的版权和版本说明;2.预处理块3.函数和类结构声明等等;头文件规则:1.为了防止头文件被重复引用,应当使用ifndef/define/endif结构产生预处理块;2.用#include 格式来引用标准库的头文件;3.用#include “filename.h”格式来引用标准库的头文件原创 2017-03-16 20:38:22 · 572 阅读 · 0 评论 -
使用CodeWarrior出现Warning:Removed dead Code/assignment
顾名思义,警告所指示的代码是死代码,是不可能被执行的代码或是写了等于没写的代码,它所指示的代码行跟前面的代码有关,例如: int a = 3; if(3 == a) { do somesing;}此时应该检查前面的代码。原创 2017-03-17 15:29:26 · 3293 阅读 · 0 评论 -
使用CodeWarrior编译时出现Warning:C12056 SP debug info incorrect because of optimization or inline assembler
代码最优化时堆栈指针不一致造成。在菜单->edit->standardsetting->compiler for HC12->option中选中MainOptimize Target,再选中optimize for execution time即可。原创 2017-03-17 16:09:54 · 2614 阅读 · 0 评论 -
程序跑飞情况分析
1.在一个文件定义全局变量,在另一个文件引用时,使用了extern但是没有写数据类型。例如:int SOC_High_Flg; extern SOC_High_Flg;2.在定义一个数组const int FltCode[6]后调用为FltCode[7];原创 2017-03-17 16:14:43 · 575 阅读 · 0 评论 -
使用CodeWarrior编译时没有错误但编译失败
没有错误,但是编译失败,出现下列警告:“Out of allocation space in segment RAM ataddress 0x397C ” 与 “Link failed”原因是随机存储器(存储数据)的内存不够用,在文件夹“Linker Files”中找到“Project.prm”文件并打开,找到STACKSIZE 0x***,并修改参数0x***即可;(***代表参数)原创 2017-03-17 16:17:09 · 4831 阅读 · 2 评论 -
scanf函数返回类型
scanf("%d %d",&a,&b);1.函数返回值为int型。如果a和b都被成功读入,那么scanf的返回值就是2;2.如果只有a被成功读入,返回值为1;3.如果a和b都未被成功读入,返回值为0;4.如果遇到错误或遇到end of file,返回值为EOF。end of file为Ctrl+z 或者Ctrl+d。原创 2017-03-20 19:20:47 · 630 阅读 · 0 评论 -
ARM与单片机的区别
1、单片机没有操作系统,指令集也没有arm丰富。2、它们的应用范围不一样。单片机用于控制,简单(相对而言)信息处理。arm是信息处理和控制。3、基于arm处理的操作系统移植成功后,上面可以运行多种应用程序,单片机就不行了。.1、软件方面 这应该是最大的区别了:引入了操作系统。为什么引入操作系统?有什么好处? 1)方便。主要体现在后期的开发,即在操作系统上直接开发应用原创 2017-03-21 21:47:54 · 1474 阅读 · 1 评论 -
整车控制器(VCU,vehicle Controller Unit)
整车控制器(VCU,vehicle Controller Unit),即动力总成控制器,是整个汽车的核心控制部件,它采集加速踏板信号、制动踏板信号及其他部件信号,并做出相应判断后,控制下层的各部件控制器的动作,驱动汽车正常行驶。作为汽车的指挥管理中心,动力总成控制器主要功能包括:驱动力矩控制、制动能量的优化控制、整车的能量管理、CAN网络的维护和管理、故障的诊断和处理、车辆状态监视等,它起着控制车原创 2017-03-22 20:39:27 · 11608 阅读 · 0 评论 -
蓄电池容量
C是蓄电池容量代号,例如0.5C就是以相当于蓄电池容量一半的电流放电。(注意:该值与电压无关)提示:如果高于电池容量,将会损坏;低于电池容量,将不会正常工作。原创 2017-03-22 20:41:00 · 657 阅读 · 0 评论 -
剩余电流装置
剩余电流装置Residual Current Device(RCD)在正常工作条件下,接通负载和断开电流;而当电路的剩余电流在规定的条件下达到其规定值时,引起触头动作而断开主电路的一种保护器。原创 2017-03-22 20:48:17 · 634 阅读 · 0 评论 -
大端-小端模式
大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。转载 2017-04-08 14:37:10 · 436 阅读 · 0 评论 -
volatile的作用
volatile的作用: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.简单地说就是防止编译器对代码进行优化.比如如下程序: XBYTE[2]=0x55; XBYTE[2]=0x56; XBYTE[2]=0x57; XBYTE[2]=0x58; 如果对外部硬件上述四条语句分别表示不同的操作,会产生四种不同的动作,那么编译转载 2017-04-08 14:47:10 · 913 阅读 · 0 评论 -
const
const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。另外CONST在其他编程语言中也有出现,如C++、PHP5、C#.net、HC08 C。 C中CONST的使用: 虽然这听起来很简单,但实际上,cons转载 2017-04-08 14:48:53 · 341 阅读 · 0 评论 -
源代码(未完待续)
char* strcpy(char * dst, const char * src){char * cp = dst;while( *cp++ = *src++ ); /* Copy src over dst */return( dst );}Char* strcat ( char * dst , const char * src ){原创 2017-04-08 14:39:44 · 458 阅读 · 0 评论 -
Kb和KB的区别
计算机中的信息都是二进制的0和1来表示,其中每一个0或1被称作一个位,用小写b表示,即bit(位);大写B表示byte,即字节,一个字节=八个位,即1B=8b;前面的大写K表示千的意思,即千个位(Kb)或千个字节(KB)。表示文件的大小单位,一般都使用字节(KB)来表示文件的大小。Kbps和Kbps的区别:首先要了解的是,ps指的是/s,即每秒。Kbps指的是网络速度,也就是每秒钟原创 2017-03-23 10:07:28 · 4295 阅读 · 0 评论 -
使用CodeWarrior出现Warning:Return expected
非void函数没有返回值即函数没有使用return原创 2017-03-17 15:24:18 · 754 阅读 · 0 评论