学习笔记
文章平均质量分 52
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 评论 -
无刷电机FOC无感控制-关于单电阻采样时,机械周期与载波频率之间的必要关系
原创 2021-03-21 02:59:20 · 1937 阅读 · 0 评论 -
调试小细节之《电阻封装不同带来的影响》
自打从事电控工作以来,对于无感控制来说,采样电阻这个元器件就变得异常敏感和重要,不管是阻值大小和精度的选用还是温升带来的阻值变化,都会极大的影响大电机的运行,选好合理的采样电阻可以减少很多不必要的麻烦,尤其是单电阻采样;现象:最近在使用单电阻采样的无感方案调试一款电机,启动运行一切基本调试结束,因为要发样十套,硬件工程师在更换了完全一样新制作的一套控制板后,电机第一次上电运行只有200W,然后再次上电有280W,多次上电运行后电机功率始终最高达到300W左右,与最初版调试的额定功率470W相差很大.原创 2020-09-26 02:21:51 · 1698 阅读 · 2 评论 -
调试小细节 之 ADC采样值出错
adc驱动初始化记录原创 2020-06-07 22:58:04 · 6372 阅读 · 0 评论 -
队列——循环队列、链式队列介绍和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 评论 -
电机常用术语解释
从事无刷电控工作以来,接触不少电机方面的术语,小结一下极对数(P):电机转子中N-S极的对数相数(m):电机绕组个数电角度(θe)/机械角度(θ):θe = P * θ电角频率(ωe)/机械角频率(Ω):ωe = P * Ω电角频率与电机转速(n) : n = 60 * ωe / P极(2P)槽(Z)配合:Z/2P相电压:电机相绕组对电机中心点电压线电压:电机两相绕组之间电压...原创 2020-02-08 15:42:05 · 2214 阅读 · 0 评论 -
关于在树莓派上搭建git服务器的权限问题
最近在一个树莓派4B+上搭建一个git仓库给公司做代码版本管控,之前在网上看了教程很简单(用树莓派搭建GIT私有服务器),可是自己操作的时候一直出现无法clone和push的问题,一直提示没有权限或者文件问题,经过反复测试发现问题的关键点就是git仓库权限问题没有配置好;仓库初始化:git init --bare //这里的 --bara意思是搭建一个裸仓库虽然我后面把客户端计算机的公...原创 2019-12-31 23:45:04 · 355 阅读 · 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 评论 -
关于stm32单片机准双向IO口配置
我们在开始学习51内核的单片机的时候就知道,p0口的引脚都是双向IO口,P1,P2,P3的IO口需要双向使用时需要外接上拉电阻,故称为准双向IO口,但是我们在学习STM32单片机的时候知道32的IO口可以配置为8种状态,但是却没有双向IO这一选项,但是我们也可以通过一些操作将stm32的引脚配置为准双向IO口;配置stm32的IO口为准双向IO口的方法就是软件上:将需要配置我的准双向IO口的...原创 2019-10-31 23:24:25 · 4771 阅读 · 0 评论 -
嵌入式软件开发过程中几种常见编程规范
使用四个空格而不是使用tab这条规定乍一看有点奇怪,因为我们已经习惯了开发过程中使用tab键代替空格去分隔程序,为什么要求使用四个空格这种很傻很慢的操作?其实这里要求使用四个空格主要是因为在不同编辑器中对tab键的定义不同,如果混用tab键和space键(空格),会造成程序在移植后变得混乱,不利于程序快速移植使用;比如我常用的MDK5,在设置里可以看到,即使是同一编译器的不同类型文件,输入...原创 2019-10-31 23:01:07 · 699 阅读 · 0 评论 -
PID算法经典小结
虽然自己参与和独立做过的项目有好几个都用到了PID算法,但是当自己真的想真理总结一下的时候发现别人的已经写的非常好了,自己越写越觉得多余,记录几篇链接做为理论参考PID算法的定义与分类:https://blog.csdn.net/ybhuangfugui/article/details/99826730PID原理和参数调试https://blog.csdn.net/ybhuang...转载 2019-10-23 21:51:48 · 571 阅读 · 0 评论 -
IIC通信协议原理总结
一.主要特征1.只要求两条总线线路 一条串行数据线 (SDA) 一条串行时钟线 (SCL)2.每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机 /从机关系软件设定地址 主机可以作为主机发送器或主机接收器3.它是一个真正的多主机总线 如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏4.串行的 8 位双向数据传输位速率在标准模式下可达 100kbit/...原创 2019-07-09 14:50:42 · 1250 阅读 · 0 评论 -
编码器介绍和应用
编码器介绍1. 什么是编码器?简而言之,编码器是一种提供反馈的传感设备。编码器将运动转换为电信号,该信号可由运动控制系统中的某种类型的控制装置读取,例如计数器或PLC。 编码器发送反馈信号,可用于确定位置,计数,速度或方向。控制设备可以使用该信息来发送特定功能的命令2. 编码器如何工作?编码器使用不同类型的技术来创建信号,包括:机械,磁性,电阻和光学 - 光学是最常见的。在光学传感中,编码...原创 2019-08-09 15:29:14 · 7221 阅读 · 1 评论 -
线程和进程
进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;或者更专业化来说:进程是指程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。进程——资源分配的最小单位,线程——程序执行的最小单位。线程进程的区别体现在4个...转载 2019-08-14 11:32:54 · 158 阅读 · 0 评论 -
c关键字const详解
最近被人问了个技术问题,感触很深,就是关于const关键字的基本用法判断,看到这个问题我其实挺开心的,因为去年我在书上记录过C 语言的几个常用关键字的基本用法,最近用的少了,都有点生疏遗忘了,技术就是一把容易省生锈的转载 2019-08-14 16:14:43 · 340 阅读 · 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 评论 -
关于 LF will be replaced by CRLF 问题的解决方式
之前公司用git比较多的时候遇到过这个问题,当时搜到这篇文章关于 LF will be replaced by CRLF 问题出现的原因以及解决方式就在下面评论了一句只需要输入git config autocrlf false就行了,rm 这种操作,新手一不小心误操作就惨了,大家注意点没想到点赞的人还挺多的,说明这个解决方法还是不错的,博主的文章解释的挺清楚的,但是解决操作就。。。。。看...原创 2019-08-09 10:33:19 · 834 阅读 · 0 评论 -
堆和栈最准确理解~透彻
堆和栈是我们在开发的过程中经常遇到的概念,也是最容易搞混和糊涂的概念,这两天下决心经过查资料问人,终于把堆和栈的概念搞的清清楚楚了,下面是网上一位广东的大哥给我的解释,再次感谢,我觉得这个解释很精炼了,但是有一点小问题堆和栈的第一个区别就是申请方式不同:栈(英文名称是stack)是系统自动分配空间的(准确的说加粗的这句话时错误的,下面解释\color{RED}{准确的说加粗的这句话时错误的,...原创 2019-08-09 09:49:53 · 1028 阅读 · 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 评论 -
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 评论 -
ARM和X86比较
信不信,随便逮住一个人问他知不知道CPU,我想他的答案一定会是肯定的,但是如果你再问他知道ARM和X86架构么?这两者的区别又是什么?绝大多数的人肯定是一脸懵逼。今天小编就带你深入了解CPU的这两大架构:ARM和X86。以后出去装X就靠它了! ## 重温下CPU是什么鬼## 中央处理单元(CPU)主要由运算器、控制器、寄存器三部分组成,从字面意思看运算器就是起着运算的作用,控制器就是负责发出...转载 2019-07-12 14:50:57 · 19538 阅读 · 0 评论 -
STM32之模拟I2C通信驱动代码
/******************************************************************************Name: i2c.cDescription: I2C communication functionProject: ****Auther: ZWMCU: STM32F103RET6...原创 2019-07-15 15:06:10 · 677 阅读 · 0 评论 -
关于MAX3232ESE+T的过热问题
因公司硬件工程师离职,无新人补缺,记最近遇到一个硬件问题,关于RS232接口无法通信,经过检查发现USART转232的芯片MAX232发热严重,经测量达到了60多度,明显不正常,硬件电路如下经过查找该芯片的数据手册,发现这个电路没有问题,完全符合典型应用电路,然后马上换芯片,再次上电不到五秒马上又开始发热发烫,其实这款芯片有的时候是可以通信的,但是时好时坏也不确定是什么原因,于是怀疑电容可能...原创 2019-07-05 11:12:00 · 4126 阅读 · 0 评论 -
stm32两种常见的串口接收方式
最近遇到一直增加功能和调试中不知不觉把带串口接收DMA的串口资源给用完了,换成不带DMA的串口接收数据有点不一样的地方,记录一下,还有以后的开发中不能老是买通信都是串口的模块,模块多的时候,不利于扩展串口1+DMA接收数据的基本配置下面的这段代码是串口+DMA接收数据的配置,配置完后在中断里的**receive_process()**函数添加数据处理即可,这种方式不需要CPU参与,可以节省C...原创 2019-07-08 17:02:00 · 2334 阅读 · 0 评论 -
JScope_V510d 可以图形化显示的调试助手
在嵌入式日常开发过程中经常会用到各种各样的调试助手,最常用的就是串口助手,还有RTT或者在线仿真等,但是这些工具都需要加代码或者达不到我们想要的效果,最近学到了一个无需添加任何代码,无需仿真,只要有J-LINK连接到正常运行的设备上就可以显示变量图形的调试助手:JScope安装就不介绍了,一路点到头就行了;介绍一下使用方法双击打开,如上图所示,第一次使用选择New Project,进入下...原创 2019-07-02 17:13:19 · 578 阅读 · 0 评论 -
Implicit declaration of function “xxx” is invalid in C99.
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...原创 2019-03-04 22:37:25 · 34067 阅读 · 14 评论 -
嵌入式软件测试——1.简介
#百科介绍一般来说,软件测试有7个基本阶段,即单元或模块测试、集成测试、外部功能测试、回归测试、系统测试、验收测试、安装测试。嵌入式软件测试在4个阶段上进行,即模块测试、集成测试、系统测试、硬件/软件集成测试。前3个阶段适用于任何软件的测试,硬件/软件集成测试阶段是嵌入式软件所特有的,目的是验证嵌入式软件与其所控制的硬件设备能否正确地交互。一般来说,软件测试有两种基本的方式,即白盒测试方法与黑...转载 2019-02-13 11:20:57 · 5627 阅读 · 2 评论 -
STM32 外部中断
STM32 的每个 IO 都可以作为外部中断的中断输入口,STM32F103 的中断控制器支持 19 个外部中断事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。STM32F103 的19 个外部中断为:线 0~15:对应外部 IO 口的输入中断。线 16:连接到 PVD 输出。线 17:连接到 RTC 闹钟事件。线 18:连接到 USB 唤醒事件。STM32 供...原创 2019-07-24 11:54:01 · 514 阅读 · 0 评论 -
C语言之位域的概念和用法
先来个位域申明:struct{ type [member_name] : width ;}元素描述type整数类型,决定了如何解释位域的值。类型可以是整型、有符号整型、无符号整型。member_name位域的名称。width位域中位的数量。宽度必须小于或等于指定类型的位宽度。带有预定义宽度的变量被称为位域。位域可以存储多于 1 位的数,例如,需...原创 2019-07-24 14:23:14 · 1218 阅读 · 0 评论 -
RT-Thread程序启动过程
本文介绍的启动过程是基于STM32F103系列MCU上运行的RTT实时操作系统以下执行步骤通过MDK的debug模式进行单步执行,得出该系统实际的启动过程代码执行步骤如下和裸机相同,第一步执行SystemInit()进行系统时钟初始化,如下图启动文件所示执行第二步就和裸机不同了,这里不是执行_main函数,而是执行RTT的main 函数 $Sub$$mainint rtthr...原创 2019-08-08 17:51:30 · 1763 阅读 · 0 评论 -
RT-Thread简介
RT-Thread 是一款完全由国内团队开发维护的嵌入式实时操作系统(RTOS),具有完全的自主知识产权。经过近 12 个年头的沉淀,伴随着物联网的兴起,它正演变成一个功能强大、组件丰富的物联网操作系统。1.RT-Thread概述RT-Thread,全称是 Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统,基本属性之一是支持多任务,允许多个任务同时运行并不意味着...原创 2019-08-08 17:09:48 · 6762 阅读 · 0 评论 -
Linux环境下C学习路线
UNIX/Linux下C语言的学习路线。一、工具篇“公欲善其事,必先利其器”。编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工具。1、操作系统在UNIX或Linux系统中学习C很方便,所以在开始您的学习旅程前请先选择一个UNIX或Linux操作系统,目前可供个人免费使用的UNIX或Linux系统有FreeBSD、Re...转载 2019-08-06 14:33:40 · 282 阅读 · 0 评论 -
c语言之typedef vs #define
typedef定义: 1. C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。预处理定义 : 2. C 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤。简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理。我们将把 C 预处理器(C Preprocessor)简写为 CPP。所有的预处理器命令都是以井号(#...原创 2019-08-06 14:00:53 · 266 阅读 · 0 评论 -
keil报错error: declaration may not appear after executable statement in block
这是一个常见问题,主要原因是:C语言的C99前的版本变量声明不允许出现在语句之后,这种在语句之后声明变量的方式,c++允许,现在的很多c编译器也允许。最早的c是不许这么写的,要求所有的局部变量必须在函数开头声明。解决办法:...原创 2019-08-08 10:03:13 · 1043 阅读 · 0 评论 -
Linux常用命令大全~非常全!非常详细!(带目录查找)
这是一个命令大全,介绍的很详细,可以作为字典查找,mark一下,省的到处找了系统信息arch 显示机器的处理器架构uname -m 显示机器的处理器架构uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上...转载 2019-08-17 07:09:56 · 1264 阅读 · 0 评论 -
C语言之static常用用法详解
本来想自己总结写一下,看到这个人写的挺好挺全面的,简单修改了一下,把时间省在更重要的事情上!C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意不是局部变量)或者函数只能在一个源程序中定义一次,如果有重复定义的话编译器就会报错。伴随着不同源文件变量和函数之间的相互引用以及相互独立的关系,产生了extern和static关键字。下面,详细分析一下static关...转载 2019-07-30 10:08:55 · 591 阅读 · 0 评论 -
CAN入门教程~CAN总线的基础知识
1.CAN简介:CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。CAN 通过 ISO11898 及 ISO11519 进行了标准化,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。CAN 控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平(0)和隐性电平(1...原创 2019-07-24 18:10:43 · 7103 阅读 · 0 评论