
嵌入式
grey_csdn
这个作者很懒,什么都没留下…
-
原创 552_lscpu对比树莓派与玩客云的CPU
全部学习汇总: https://github.com/GreyZhang/bash_basic这个是一个基础的命令,我看了下我的玩客云armbian以及树莓派默认的系统中都是有的,那就是lscpu。简单看看帮助信息:主要的功能就是查看CPU的架构信息,有一些不同的可选的信息项。简单测试一下-a的选项:看起来,有些选项得相互配合才可以达到效果。看了一下,默认的效果到时信息还挺丰富。可以看得出玩客云用的Cortex-A5架构的处理器,4核心,每个核心可以支持1线...2021-02-26 22:12:2647
0
-
原创 478_Arduino telnet连接测试
全部学习汇总: https://github.com/GreyZhang/arduino_uno 利用一个Arduino的例子测试一下telnet,虽然我现在还不知道telnet是怎么玩的。简单网上搜了一个XX知道,就这么做个初步测试吧! 其实,这样的环境中Arduino算是一个小的网络服务器。部分配置如下: IP地址前面的一个例子中初步知道了,这里的客户端,我感觉跟我接下来的测试有一点相关性。不过,测试的数目似乎又有一点不对...2020-12-12 10:36:54137
0
-
原创 477_Arduino以太网板盾功能测试
全部学习汇总: https://github.com/GreyZhang/g_arduino 这个例程我第一次调试通过其实是花了不少时间的,主要是我对以太网几乎没有什么基础的知识积累。经过了一个晚上的煎熬,最终也是没能够调试成功。而更加不幸运的是,我买的两个扩展板有一个是坏掉的,而我第一次的测试其实就是使用了坏掉的那一个。 最初使用Arduino内置的例程的时候,调试没有通过。后来,用了一个网络的测试程序测试通过。 代码比较精简,...2020-12-11 21:15:3245
0
-
原创 476_Arduino abi.cpp文件内容分析
全部学习汇总: https://github.com/GreyZhang/arduino_uno 在Arduino的基础库文件实现中,发现了一个abi.cpp文件,文件内容非常简单,没太明白这个文件的设计意图。 从注释看,这个文件中的两个接口有可能是为了做部分UART诊断信息的处理。而从接口调用看,其实,运行到这里面的接口的时候其实是系统终止了一个线程的时候。 Abi,从这个文件看不好猜测是什么缩写,什么含义。我从网络上查了一...2020-12-10 21:13:0443
0
-
原创 474_Arduino中二进制的标识实现分析
全部学习汇总: https://github.com/GreyZhang/arduino_uno 在之前的学习工作经验中,C语言对于二进制的支持还是很自然的。我并不知道C++中到底是什么情况,毕竟在Arduino的开发环境中,C++其实才是占有的霸主。 我之前尝试使用过其他平台的二进制表达模式,但是编译的时候没有被识别。今天看了一个文件之后,恍然大悟,为什么例程中的用法是没有问题的。 在Arduino IDE的安装目中,我找到...2020-12-08 19:13:3559
0
-
原创 473_Arduino.h内容分析
全部学习汇总: https://github.com/GreyZhang/arduino_uno 前面做了main.cpp的简单分析,大概的代码如下: 其中,包含了一个Arduino.h的头文件。今天,来看看这个头文件。 前面的头文件暂且不考虑,这里面的几个宏的信息其实主要是分为2部分。第一个是MCU的各个端口信号相关的状态或者属性,第二个则是数据中心用到的一些常量参数。 这个具体的作用我没有猜出来...2020-12-07 22:12:40179
2
-
原创 472_Arduino setup之前的工作分析
全部学习汇总: https://github.com/GreyZhang/arduino_uno 在Arduino的一个程序的框架中,初始化的部分在setup函数中实现,而之后软件进入到一个叫做loop的无限循环。这个是大概的一个套路性的处理。 那么,在嵌入式的软件中,最初的软件执行一般是startup,然而用户真正需要了解的软件的初始其实还真就是main函数。C语言中如此,嵌入式的C++也是差不多的。如此,可以根据这个线索找到setup之前是否还有...2020-12-06 11:01:0065
0
-
原创 471_Arduino初始化以及loop的实现
全部学习汇总: https://github.com/GreyZhang/arduino_uno 在进行各种例程调试的时候,我们知道Arduino的工程中有一个初始化的函数setup,还有一个无线循环loop。 这是其中的一个例子,如果把这两个函数改一个名字会出现报错。例如,我修改一下setup为setup_test,之后打开编译的详细输出。 链接的时候,找不到这个函数。 为什么会出现这种情况呢?我在逐...2020-12-05 11:44:49137
0
-
原创 470_Arduino LCD驱动初步
全部学习汇总: https://github.com/GreyZhang/arduino_uno 手里也有一个LCD的模块,最早的时候应该是跟着Arduino一起买的。但是,一直以来也没有用过。其实,有好几次想把这个模块开发出来,这样可以让我的很多测试信息可以方便的显示出来,后来全都放弃了。 最近打算从最底层的层面看看Arduino的整个开发基础框架,全部的例子以及驱动的开发全都摸一遍。还是看到了这里,找出来做了简单的测试。 几个...2020-12-04 21:52:0032
0
-
原创 469_Arduino超声波距离传感器例程调试
全部学习汇总: https://github.com/GreyZhang/arduino_uno 最近在逐个分析学习Arduino中自带的一部分例程,同时梳理一下学习笔记。中间有不少例子有一些雷同或者最基础的元素是相同的,我也就直接跳过了。这次看的这个超声波距离传感器则是比较新的,在此之前并没有接触过这样的模块。我手头正好也有这样的一个模块,在我手里也不知道多久了,一直没有用起来。正好,这个也是很好的机会,让我之前学习上的投资也算是有点回收。 首先看...2020-12-03 20:52:5649
0
-
原创 468_Arduino生成ASCII码表
全部学习汇总: https://github.com/GreyZhang/arduino_uno 看了一个ASCII码表的生成程序,其实非常简单,我估计这个例程的存在主要是为了演示串口的输出功能。 大概的软件如下: 其中,thisByte的初始值是33,而ASCII码的范围也是33到126。等全都处理完之后,进入到一个死循环。 相比C语言的printf来说,Arduino的这个串口输出功能其实功能还要丰富一...2020-12-01 20:01:36110
0
-
原创 467_Arduino AD采集范围标定
全部学习汇总: https://github.com/GreyZhang/arduino_uno 这个其实电路跟我之前调试过的几个差不多,功能我也不再去调试了。不过,这里面有一个小技巧在里面。 管脚的配置其实没有什么特殊的地方,不过在这里有一个记录的过程,那就是尝试测试最小以及最大的AD值。当然,记录的时间在启动之后的5S之内。这样,如果硬件设计上有偏差的时候,就能够测试出一个具体的AD可以采集到的范围。 这里其实还是AD...2020-11-30 21:35:4396
0
-
原创 466_Arduino模拟输入与模拟输出例程调试分析
全部学习汇总: https://github.com/GreyZhang/arduino_uno 看了一个模拟量输入以及输出的例子,实现了AD的采集以及AD的输出。原理图如下: 比较简单,就是一个变阻器实现一个分压的AD采集,然后还有一个可以输出AD量的管脚控制一个LED的亮度。 软件实现其实没什么可以分析的,实现了一个LED亮度跟随电压采集变化的功能。同时,通过串口输出了电压测试的数据以及接下来的输出数值。...2020-11-29 09:31:59157
0
-
原创 465_Arduino蜂鸣器乐曲输出例程分析
全部学习汇总: https://github.com/GreyZhang/arduino_uno 今天调试测试一个有意思的小程序,这个在我日常的工作中基本上碰不到。日常的工作中,各种输出相对来说都是比较单调的东西。但是,这个例子实现的是音乐节奏的输出。 原理图如下: 我正好手里有一个蜂鸣器,不知道参数什么状态。我直接按照这个例子搭建了电路,调试的时候却发现声音很低。后来发现眼神不好,100欧姆的电阻整成了100K欧姆。既然这样...2020-11-28 09:56:5152
0
-
原创 464_Arduino状态变化检测例程分析
全部学习汇总: https://github.com/GreyZhang/arduino_uno 其实,这个例子跟之前看过的Debounce例子还是有一丝相同的地方的。具体,可以直接在代码分析的时候说明一下。 这里,我还是按照我自己的电路修改了管脚的配置。 这里,其实就涉及到了前面提到的功能了。但是,这里使用的是一个阻塞模式的延时。其实,在实际的应用中是不实用的。而之前的例程中,这部分采用了CPU占用率更低的模式。...2020-11-27 21:09:4855
0
-
原创 463_Arduino Debounce例程分析
全部的学习汇总: https://github.com/GreyZhang/arduino_uno 近期,计划把Arduino里面的例子全都分析一下,看看是否有值得参考借鉴的设计。今天看了一下Debounce的例程,其实还是有一点分析的价值的。 我觉得,如果是到了消费类电子里面这种按键设计肯定是大把存在。但是,正在汽车电子里面,尤其是以控制为主的控制器设计里面这部分还是很少的。但是技术其实是想通的,汽车电子里面也有一些其他的信号处理会有Debounc...2020-11-26 21:01:3268
0
-
原创 460_J1939请求报文的应答
全部学习汇总: https://github.com/GreyZhang/J1939_basic 前面大概看了J1939的请求报文,其实就是请求一个PGN的信息。今天,把手里的例程基本梳理了一下。感觉大概调试了一下,基本上看明白了大概的用法。只是,例程似乎只是用于基础功能的演示,并没有严格遵循相应PGN的定义。 这里,先大概了解一下发送机转速PGN。 其实,这个是已经在文档中定义过了的PGN。如果,实际的应用肯定得按照这个来。...2020-11-22 21:05:07239
1
-
原创 459_J1939请求报文格式分析与代码印证
全部学习汇总: https://github.com/GreyZhang/J1939_basic 这次来小结一下请求报文的发送,因为响应部分暂时有一点点模糊没看明白,还需要补充一点文档信息。 关于请求报文,我参考了恒润的一份PPT中的一页,这个在很多文库能够看得到。具体部分据图如下: 从这份PPT中的信息看,其实请求报文还是很简单的一个东西。至少,请求的动作还是很简单的。这是一个固定的报文格式,填充一个PGN的信息即可。而请求...2020-11-21 11:09:50150
0
-
原创 457_J1939中普通报文的队列接收实现机制
全部学习汇总: https://github.com/GreyZhang/J1939_basic 在J1939的协议栈中存在一个队列的收发机制,其中接收队列的实现之前在做ISR的部分代码分析的时候已经看过接口上的交互。对于这个队列实现,其实应该有一个具体的实现机制。 关于队列的机制,在学习数据结构的时候接触过队列的实现,这个基本上是基于链表来实现的。但是,链表的实现是需要基于内存的动态分配来实现的。在嵌入式系统中,尤其是涉及到高实时性和可靠性相关的系...2020-11-19 21:27:4565
0
-
原创 456_J1939中普通报文的队列接收
全部学习汇总: https://github.com/GreyZhang/J1939_basic 之前研究Arduino的时候,看过了Arduino开源社区中别人对ECAN使用的时候使用了队列的收发。全都是软件实现,没有使用硬件的模式。手里的这套J1939的代码也有这么一个类似的功能。 接下来,看看手里这套代码的处理。 关键代码都在注释上面,其实,下面的部分也已经不在同一个代码块。正好这个函数还剩下这么一点没做分析,一起给标注...2020-11-18 08:08:1896
0
-
原创 455_J1939信息接收接口分析
全部学习汇总: https://github.com/GreyZhang/J1939_basic 之前,大概分析了J1939_ISR,要想明确弄清楚J1939的收发的机理需要继续分析两个CAN的收发接口。这里,先尝试分析一下CAN消息的接收功能。 首先需要注意的是,这个函数用了static,因此使用的范围会有一些限制。通常是不会出一个文件,尤其是其在C文件中定义的。后面的代码,出现了好几重的预处理,目前我的emacs配置下需要层层查看。万不得已,...2020-11-17 09:45:4679
0
-
原创 454_J1939中断模式下的中断服务子程序分析
全部学习汇总: https://github.com/GreyZhang/J1939_basic 经过之前的几次代码分析,基本上知道了广播多帧报文的实现是一个什么过程了。也基本上知道了命令地址实现的基本流程和方法了。 我现在接触的3份J1939的代码例程中,有一份是使用POLL模式,而最近的两份代码则是使用的中断模式。虽然,大概的功能已经分析过了,但是中断ISR还是没有看过究竟是如何用的。而这部分应该是这份代码在不同平台上移植的关键。...2020-11-16 10:26:5044
1
-
原创 453_J1939命令地址PGN 65240(FED8)的使用
全部学习笔记汇总: https://github.com/GreyZhang/J1939_basic 前面了解了一下广播多帧报文的实现分析,当时发送了一个0xFED8(65240)PGN的信息。但是,这种数据的组包顺序以及规则没有弄清楚。 我没有系统阅读过全部的J1939的资料,因此直接借助了网络资源。找到了一份文件,对此的解释如下: 这一组报文的发送必须是通过BAM来实现,因此这是之前我们看到的功能的实现原因。之前的报文发送...2020-11-15 13:55:51122
0
-
原创 452_J1939广播多帧报文的例程分析
全部学习汇总: https://github.com/GreyZhang/J1939_basic 借助一个简单的例子来看一下J1939广播多帧报文的发送实现。为什么不叫多帧报文而叫广播多帧报文呢?因为在J1939中存在两种多帧报文的发送模式,一个是广播另外一个是点对点的。而两个流程是不同的。 上面的这个流程图就是J1939的广播多帧报文的实现,这个是我从Vector的一份文件中截取出来的。从上面可以看得出,大概的流程是先发送一帧TP.CM_BAM...2020-11-14 16:20:22350
0
-
原创 451_J1939地址声明超时确认处理代码分析
全部学习汇总: https://github.com/GreyZhang/J1939_basic 前面做了一个地址声明初始化的功能分析,但是这个动作触发之后还应该有一个确认的过程。其中,声明不成功的处理还是容易的,因为会直接收到一条报文。如果是声明成功的话,需要等到一定的时间,在相应时间内没有冲突报文则可以取得相应的地址。 这是超时处理确认的处理,关键点还是在上面的这个状态的变化。需要确认这个状态是否被清零了,因为在初始化的时候这个状态是置位的。...2020-11-13 08:24:2243
0
-
原创 450_J1939地址声明函数的调用处理分析
全部学习汇总: https://github.com/GreyZhang/J1939_basic J1939地址声明的接口功能之前基本上分析过了,这一次看看在整个我看到的例程中这个接口究竟是如何使用的。毕竟,这个接口还是有两种不同的使用模式的。 这个接口在整个工程里面被调用的次数不是很多,我搜索了全部的工程如下: 最前面两个还有最后两个是没有必要关注的,这都是生成的文件或者辅助的工程文件。H文件中的就是一个声明,也不需要看。接...2020-11-12 08:19:0260
0
-
原创 448_J1939地址声明设计代码阅读分析
全部学习汇总: https://github.com/GreyZhang/J1939_basic 前面看了一个初始化的接口,发现其实跟协议栈相关的更多的还是最后的一个队地址声明接口的调用。 这个函数是一个静态函数。 通过这个简单的细节就可以知道,这个是一个协议栈内部的一个功能,也就是跟协议栈的协议实现有着很大的关联度。好在,看了一下这个函数的代码量之后让我舒了一口气。这个函数的实现代码量还是很小的。...2020-11-09 22:02:1944
0
-
原创 447_J1939初始化代码分析
全部学习汇总: https://github.com/GreyZhang/J1939_basic看了一下我手中的这一份J1939的代码其实代码量不大,看起来我可以直接做一个详细的代码分析。这个就是初始化的第一个接口,今天就完成这个接口的分析。 其实这个主要是一些状态和设备的信息初始化,在不同平台有一些工作可能可以通过其他的方式来实现。 当前我看的软件中,上面的设计可能有一些啰嗦。不过,上面这个考虑到了不同传入参数的处理。 这些其实还是CAN驱...2020-11-07 10:17:2680
0
-
原创 446_PIC18F系列MCU的中断实现
全部学习汇总: https://github.com/GreyZhang/PIC18F 最近在PICF18的平台上熟悉J1939的协议,第一个例子算是调试完了,使用的最简单的polling模式来实现的。但是如果想要让J1939的协议栈处理的能力更好,实时性更好且设计更加简单一些,需要使用中断。 这样,我需要的中断是CAN通信的收发功能。 看一下相关的文档: 正好,我用到的两个MCU兼容性上基本上是一致的,中...2020-11-05 07:22:13109
0
-
原创 445_J1939地址声明报文格式
全部学习汇总: https://github.com/GreyZhang/J1939_basic 上次做了地址声明的部分分析,当时出现了一份报文交互记录。当时只注意了源地址和目标地址,没有注意到数据场。今天没事儿的时候突然间脑子里想起了这么一回事儿,当时的数据场到底是一个什么信息呢? 我找到了前面的报文记录: 首先,在Vector的一份文档中有如下的描述。 如果地址声明的时候出现了地址冲突,名字具有更高...2020-11-04 20:51:0297
0
-
原创 444_J1939源地址冲突时候的协议栈处理行为分析
全部的学习汇总: https://github.com/GreyZhang/J1939_basic 之前测试用的两个板子,测试的过程中为了区分增加了一个定义:板子定义为A(地址0x80),B的地址为0x81。 现在,我手里的B板子已经进行了一次地址声明且测试过了。现在,尝试做一下测试,修改A板的程序让它的地址也设置为0x81,这样等我的A板上电运行进行地址声明的时候应该会出现冲突。 简单的修改如下: 软件修...2020-11-03 21:25:3472
0
-
原创 443_J1939源地址与目标地址的使用和判断
全部的学习汇总: https://github.com/GreyZhang/J1939_basic 前面做了官方例程的测试,两个板子能够通过按键分别控制对方的LED的亮灭。现在,做一个简单的修改: 把目标地址改成130,也就是0x82。这样,通过这个板子按键的时候,将会发送报文到目标地址0x82。姑且把这个板子定义为A(地址0x80),B的地址为0x81。 修改之后,做了两个测试。第一个是使用A的按键触发请求,结果B的灯本次没...2020-11-02 20:28:26330
0
-
原创 442_J1939 PDU Format判断
全部学习汇总: https://github.com/GreyZhang/J1939_basic 如果看到细微之处,CAN通信似乎从来都不是那么简单。尤其是到了协议栈的环节,万千变化最后还得回归到枯燥的文档,的确是不容易啃透。我自己尝试了多次J1939的学习,但是大部分都是处于理论性的材料学习,而这种学习基本上也是看完后面的前面的就会忘记。 正好手头有两个PIC18Fxxxx的开发板,虽然MCU的型号不同但是至少是架构一致而且全都带有一个ECAN模块...2020-11-01 09:02:07185
1
-
原创 441_MPLAB X中导入MPLAB工程
全部学习汇总: https://github.com/GreyZhang/PIC18F 今天安装了MPLAB X,感觉使用体验的确是不错。不过,之前有些MPLAB的工程放弃可惜,一点点新建工程重新加文件麻烦。简单操作了一下GUI,发现了一个导入旧工程的方法,测试小结一下。 首先,准备工程如下: 专门做了一下备份。 启动MPLAB X,点击如下的菜单。 选择刚刚准备的工程中的工程文件。...2020-10-31 08:44:1595
1
-
原创 440_MPLAB X中进行部分寄存器配置并生成代码
全部的学习汇总:https://github.com/GreyZhang/PIC18F 前几天使用了MPLAB工具进行了一些小测试,因为我买了一个板子,给出的例程就是这个工具实现的。在软件调试中,遇到了各种各样的问题,感觉上可能是工具太老的原因。于是去官方网站找了一下相关的MCU,查看了相关的资料。没想到这里还提供了一个免费的IDE,支持大量的MCU开发。顺利下载下来,果真我遇到的一些问题消失了。 不过,在使用MPLAB的时候有些寄存器的配置通过位配...2020-10-30 20:53:53526
0
-
原创 439_PICF184580 实现串口printf
全部学习汇总: https://github.com/GreyZhang/PIC18F 嵌入式软件调试中如果有一个串口会非常方便,一个printf几乎能够实现全部的调试功能。当然,这个得建立在你有一定的软硬件调试功底的前提下。 本来,我想把我之前用的一个pritnf模块移植到现在的工程。但是简单搜索一下,发现PIC平台上的printf其实直接使用标准库即可,只需要重新路由一下putch。 具体的实现如下: ...2020-10-29 20:42:2649
0
-
原创 438_PICF184580 CAN接收例程分析
全部学习汇总: https://github.com/GreyZhang/PIC18F 看了一个CAN接收的例程,本来还打算做一个最终的调试,把我之前的部分CAN代码也一起放进来。后来想想,不能够一直凌乱下去。先做个简单的分析,后面创建一个工程开始全新的功能调试了。 代码的排版等格式我大概用工具进行了一个处理,现在勉强有更好一点的可读性了。 加了一部分我修改过的代码了,不过不打算继续调试了。不过,还是增加了一个我之前修改过的一...2020-10-28 00:40:3347
0
-
原创 437_PIC18F4580 MCU资源梳理
全部学习汇总: https://github.com/GreyZhang/PIC18F 这两天花了一些时间调试这个MCU开发板上的程序,非常窝火,遇到了一个非常不专业的卖家给了大量不好用的东西。结果,一头扎到了软件调试中。其实,说起来,嵌入式学习的路线这样是不对的。还是要回到正确的路线上来。 大概的开发工具以及基础的环境其实已经验证过了,这很好。但是,MCU的基础信息暂时还是没有看过的。今天,针对软件需要关注的地方专门做一个梳理。...2020-10-27 20:21:5739
0
-
原创 436_PIC18F4580 CAN模块初步
全部学习汇总: https://github.com/GreyZhang/PIC18F 先看一下我手中这个MCU的管脚定义: 看上去,管脚功能相对来说比较单一。 结合上面的文档信息,RB2可以在模式设置的时候自动处理掉,而RB3则必须要进行功能配置。 以上是管脚配置的一些说明。因此,我自己修改代码的时候采用了上面的配置: 本来还想在原来的代码基础上做一下调整修改,后来考虑到都...2020-10-26 20:10:2962
0
-
原创 435_PIC18F4580 stdint数据类型支持
全部学习汇总:https://github.com/GreyZhang/PIC18F 之前玩Arduino的时候,比较方便的就是支持stdint.h中的各种数据类型。这样,在进行很多软件移植调试的时候都非常方便。PIC18Fxx,我用的开发环境中似乎这个东西是不支持的。我搜索了一下安装的目录,如下: 看起来,应该还有一个32系列的支持这样的功能。 如此,直接仿照Arduino来一份。 测试其字节长度:...2020-10-25 09:32:5050
0