C/C++
文章平均质量分 61
IT_B_O_Y
不甘平凡混一生
展开
-
single-precision operand implicitly
keil警告内容:warning: #1035-D: single-precision operand implicitly converted to double-precision翻译:单精度操作数隐式转换为双精度分析:单精度的(float)乘以双精度的浮点数,隐式转换为双精度数。解决方法:查找对应单精度数字后面加个f...原创 2021-07-13 18:25:32 · 3780 阅读 · 0 评论 -
调试小细节之内存溢出
调试过程中,莫名其妙的问题总是会时不时冒出来几个,但是不管问题如何怪异,只要细细分析,从每一处不起眼的改动去查找比对,查手册,查软件版本差异,查寄存器,查map文件等等所有相关文件,就一定能解决所有问题;毕竟电子产品的应用开发是二次开发,不是什么创新创造,都是基于现有的给出的规则和定义做新的排列组合。调试对象为51内核的电机控制板现象: 最近在调试一个新的产品过程中,将电机调速由pwm占空比控制改为串口通信控制,移植基本的串口通信功能后,验证了新版硬件的串口收发都能正常工作,且电机功能未受到.原创 2021-06-21 15:26:35 · 1036 阅读 · 0 评论 -
QT学习——指定父对象的两种方法
在QT开发过程中,如果不给创建的对象指定父对象,对象和对象(窗口和窗口)没有关系,相互独立,这不符合我们的设计要求;假设有A和B两个对象,A指定B为它的父对象,A放在B的上面指定父对象,有2种方式:1)setParent2)通过构造函数传参指定父对象,只需要父对象显示,上面的子对象自动显示代码和显示效果如下#include <QApplication>#include <QWidget>#include <QPushButton>int main(i原创 2020-10-22 23:27:54 · 4612 阅读 · 3 评论 -
队列——循环队列、链式队列介绍和C语言实现源码
线性结构: 有且只有一个根节点,且每个节点最多有一个直接前驱和一个直接后继的非空数据结构**非线性结构:**不满足线性结构的数据结构 队列1、基本概念:1.1 定义:队列是指允许在一端进行插入,在另一端进行删除的线性表,又称“先进先出”的线性表队列是一种特殊的线性结构,它只允许在队列的首部(head)进行删除操作,这称为出队,在尾部进行加入数据操作,称为入队;队列这种数据结构非常容易理解,就像我们平时去超市买东西,在收银台结账的时候需要排队,先去排队的就先结账出去,排在后面的就后结.原创 2020-06-02 23:24:47 · 1237 阅读 · 4 评论 -
C语言之联合体Union
C语言之联合体Union共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。定义共用体Union为了定义共用体,您必须使用 union 语句,方式与定义结构类似。union 语句定义了一个新的数据类型,带有多个成员。union 语句的格式如下:union [union tag]{ member definition; member definition转载 2020-05-14 22:54:34 · 627 阅读 · 0 评论 -
调试小细节之数据类型占用字节
最近手里有一款温湿度传感器AM2105,通信接口为单总线通信,介绍如下:当我按照时序正确的读取四十位数据后,按照高位左移八位或上低八位得出实际数据,但是结果却是错误的,而且多次查找都没有找到问题点;程序如下:/*******¶Á40λÊý¾Ý********/void read_hum_temp(void){ uint8_t a; AM2301_Start(); ...原创 2019-12-09 22:56:20 · 221 阅读 · 1 评论 -
C语言之volatile关键字的常用特点
在嵌入式项目开发过程中,我们经常遇到_IO,_I,_O等前缀在类型之前,在常用的单片机开发中可以查看到这些符号的本身是代指volatile关键字,关于_IO在系统级应用中的深入含义及用法暂且不做介绍,这里简单记录一下裸机开发过程中的常规知识点;volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声...原创 2019-11-26 23:18:24 · 424 阅读 · 0 评论 -
嵌入式软件开发过程中几种常见编程规范
使用四个空格而不是使用tab这条规定乍一看有点奇怪,因为我们已经习惯了开发过程中使用tab键代替空格去分隔程序,为什么要求使用四个空格这种很傻很慢的操作?其实这里要求使用四个空格主要是因为在不同编辑器中对tab键的定义不同,如果混用tab键和space键(空格),会造成程序在移植后变得混乱,不利于程序快速移植使用;比如我常用的MDK5,在设置里可以看到,即使是同一编译器的不同类型文件,输入...原创 2019-10-31 23:01:07 · 699 阅读 · 0 评论 -
转:关于data、idata、xdata、code在C51程序中详细解释
51单片机采用哈佛结构。内存空间编址有重叠。可以在不同总线上定义不同的变量。在KEIL C51中定义了xdata、idata、xdata、code几种域修饰符。这些修饰符决定了变量访问方式。data:固定指前面0x00-0x7F的128个RAM,可以用acc直接读写,速度最快,生成的代码也最小。idata:固定指前面0x00-0xFF的256个RAM,其中前128和data的128完全相同,只...转载 2019-09-08 23:42:26 · 830 阅读 · 0 评论 -
c关键字const详解
最近被人问了个技术问题,感触很深,就是关于const关键字的基本用法判断,看到这个问题我其实挺开心的,因为去年我在书上记录过C 语言的几个常用关键字的基本用法,最近用的少了,都有点生疏遗忘了,技术就是一把容易省生锈的转载 2019-08-14 16:14:43 · 340 阅读 · 0 评论 -
Linux基础~编译执行C/C++文件
想要成为一名优秀的嵌入式开发从业人员,Linux是必须要学好的,今天就记录以下最简单的入门操作,如何在Linux系统中编译和执行C/C++文件环境:Linux Ubuntu 16.04主要使用工具:vim / gcc / g++第一步:打开Linux系统,右击打开终端第二步:创建新的文件touch test.c 然后回车执行,ls查看第三步:使用vim 打开test.c...原创 2019-08-06 18:33:38 · 612 阅读 · 0 评论 -
c语言之typedef vs #define
typedef定义: 1. C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。预处理定义 : 2. C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器(C Preprocessor)简写为 CPP。所有的预处理器命令都是以井号(#...原创 2019-08-06 14:00:53 · 266 阅读 · 0 评论 -
C语言之static常用用法详解
本来想自己总结写一下,看到这个人写的挺好挺全面的,简单修改了一下,把时间省在更重要的事情上!C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意不是局部变量)或者函数只能在一个源程序中定义一次,如果有重复定义的话编译器就会报错。伴随着不同源文件变量和函数之间的相互引用以及相互独立的关系,产生了extern和static关键字。下面,详细分析一下static关...转载 2019-07-30 10:08:55 · 591 阅读 · 0 评论 -
C语言之位域的概念和用法
先来个位域申明:struct{ type [member_name] : width ;}元素描述type整数类型,决定了如何解释位域的值。类型可以是整型、有符号整型、无符号整型。member_name位域的名称。width位域中位的数量。宽度必须小于或等于指定类型的位宽度。带有预定义宽度的变量被称为位域。位域可以存储多于 1 位的数,例如,需...原创 2019-07-24 14:23:14 · 1218 阅读 · 0 评论 -
a?b:c是什么意思
a?b:c是什么意思这个是条件表达式,表示如果a为真,则表达式值为b,如果a为假,则表达式值为c条件表达式具体说明如下条件语句:if(a>b) max=a;else max=b;可用条件表达式写为max=(a>b)?a:b;执行该语句的语义是:如a>b为真,则把a赋予max,否则把b 赋予max.使用条件表达式时,还应注意以下几点:条件运算符的运算优先级低...转载 2019-07-17 10:14:19 · 6209 阅读 · 0 评论