头像-163731

xukejing

  • 13204
  • 单片机
  • 航空航天

个人成就

获得 501 次赞

帮助过660人

电源经过几米后要LC滤波是为啥

电源线比较长的时候,要滤掉共模干扰,可以选择磁环,或共模电感确定一下低通截止频率,比如干扰是来自50Hz的电网工频。用截止频率f计算电容与电感的乘积CL可以算出:CL约等于1e-5选择共模抑制电感,比如一般都是很大的,10MH。电容是个0.1nF以下的,可以不加

仪表运放电路输入为0,输出约200mV

运放的输出电压可表示为(输入电压+偏置电压)x放大比。输入电压为0时,输出值为偏置电压x放大比。偏置电压是必须存在的。

大家对lora有什么看法,好像在国内还是不温不热的状态!

主要是竞争方案比较多,而且各自有不同的适用范围。比如zigbee、wifi。lora在低功耗远距离上有点优势,但是速率比较低,适合做距离远,但是不需要实时频繁传输数据的场合。比如农业温湿度监控,气象数据监测。lora不适用于Mavlink数据协议的机器人远程控制,因为lora的空中波特率低了,这时候还是用zigbee协议的模块好一些。

上位机和单片机的数据如何转换?

64位服务器与32位单片机的数据是通用的,以float数据为例,都是小字节在前,4个字节一个float,所以可以通过4个8位数据来通讯然后组装成float。举个例子:发送端把float型的floatBuff转为char型的charBUff可以这样写char *charBuff = (char *)floatBuff;//把float数组变成char数组接收端把char型的buff转为float型的tmpf可以这样写float *tmpf=(float*)buff;我写代码的风格比较飘逸的,再大的数组,也是一个指针就能完成数据类型转换。如果是int型数据,64位服务器也是与32位单片机也是通用的。代码风格同上。  我倒是遇到过一种有趣的情况,8位单片机的int是16位的,只有两个字节,数据格式上相当于32位系统里的short。数据转换时候,上位机需要用一个short去存来自8位单片机的int型数据

为什么指针定义后,赋值为NULL

我们举个例子说一下变量或指针分配内存的过程。先说一下普通的变量。以变量定义时,内存空间是直接分配的,比如int aa或int aa[10],aa这个内存地址是有的,内存地址里应该也有数据(解析出来可能是个很大的int型负数)。aa变量不赋值直接用的话,最多是给个警告,"警告,变量值在赋值以前被使用"。但是,指针就不一样了。变量以指针形式定义的时候,比如int *bb,因为它在内存里都还没有分配空间,虽然bb这个指针本身有初始值(当前这个值没有意义,分配完内存,会指到具体的内存位置),但*bb这个内存是无法读取的(不存在,也就是NULL)。你需要给它分配内存,比如这样的一句话bb = new int[10]。然后,bb的值会变成具体的值(bb指针就指到具体的内存空间了),然后*bb也有值了。

C#写的软件,占用内存一直增加

这个叫“内存泄漏”,因为你在某个循环里面申请了内存而没有释放,循环次数越多,占掉的内存也就越多。每个循环里,用new语句申请完内存以后,可以用delete语句释放掉。

电路精简优化特别是CPU滤波电容可以减少么?

特定情况下可以减少,先要分析这个电容的目的,如果电源的输出滤波电容可以完成处理器端滤波电容的旁路和储能的目的,并且电源到处理器的线路阻抗可忽略不计,那么就可以去掉处理器端的滤波电容。比如电脑USB接ST-link给一个STM32F030F4P6单片机供电(F030本身的耗电也不大),只点一个LED。如果杜邦线比较短,可以利用一下ST-link上的3.3V稳压的滤波电容。LED多的话,加个4.7uF的储能电容。​当然,尽信书不如无书,当GPIO上会有较大的脉冲电流输出时,单单一个4.7uF电容也是不够用的。

如何防止数组越限

即使是自己写的代码,短时间里是能随时记住自己原来申请了多少空间,但是时间久了还是会忘。有时候自己会写个代码说明的文档,但是如果写得长了,自己也不愿意看自己写的东西。。。。​没有特别的方法,就是多用IDE的代码提示,然后尽量多加注释。幸好visual studio的代码提示还挺好用的。像int a[100]这样的语句申请内存,在后续写代码时候可以用visual studio的代码提示功能快速定位到那句开头定义语句。比如你打个a,然后让鼠标停留在a上面,int a[100]这句话就在提示里显示了。如果是new(c++的习惯)申请的,也一样。像int *a,然后malloc(c的习惯)申请内存的,在申请的那一句话里加入注释。跟着代码提示搜索这个a,应该很快就会定位到申请内存那句话(按搜到的顺序,第一句是定义数组名,第二句就是定义申请内存)。如果随时能方便地查询到某个变量申请内存时候的那句话,细心一点还是很容易规避数数组越界的。