- 博客(33)
- 资源 (19)
- 收藏
- 关注
原创 nfs版本问题导致挂载失败
网上很多经验贴讲述的方法是开启。并不能开启v2版本支持。挂载根文件系统时报错,版本不低,不应该只支持。文档中没有描述如何指定。
2024-09-24 16:26:10 320
原创 编译uboot出现 multiple definition of `yylloc‘ 问题
【代码】编译uboot出现 multiple definition of `yylloc‘ 问题。
2024-09-23 15:37:00 251
原创 STM32F429 SDRAM问题
一开始没怀疑是STM32芯片的问题,以为是MCU和SDRAM之间的通信有干扰、信号线没等长、阻抗问题导致信号反射之类。产品上用了STM32F429加一片16位宽的SDRAM做内存堆,时不时会遇到Hardfault重启的问题,找问题找了好久,最后怀疑可能与STM32的FMC控制器相关。当用指针去访问SDRAM中的数据,如链表指针、缓存的索引,会遇到非法值导致错误。花了很大力气去捕捉现场以及查看反汇编代码,发现当LDR一个数据到内核寄存器的时候,内核寄存器拿到的数据是错的,但是内存里的值是对的。
2024-05-16 20:09:43 481
原创 记RT-Thread rt_timer_start函数的问题
之间代码执行被中断,使得这个timer被中断代码插入定时器链表,中断执行完成之后,线程代码继续执行,此时链表中已经存在这个timer,这个timer会再一次被insert,定时器链表由此被破坏。我遇到的情况是这个timer被再一次insert后,next和prev指针都被修改为指向timer自身链表节点。在这种情况下,如果对链表进行遍历,会在这个timer链表节点死循环。如果存在多个地方对同一个timer进行启动操作,例如在线程中start和中断中 start,有可能会在第一次。在4.0.3版本中的。
2023-08-01 14:49:26 860
原创 RT-Thread终端串口改成DMA方式后死机的问题
RT-Thread的终端串口设备默认没有以DMA的方式进行open,如果需要进行比较多的数据打印,串口输出会占用大量的时间。原因就是serial.c中进行输出前,将数据先push到了数据队列,数据队列一旦满了就会将“线程”挂起,但是初始化(打印RT-Thread的logo)的时候并没有初始化线程调度器,这个时候没有线程,rt_thread_self()获取的就是NULL,rt_thread_suspend中触发断言RT_ASSERT(thread!= RT_NULL)就死机。
2022-09-22 20:31:14 647
原创 RT-Thread CAN驱动问题
在比较早的时候就发现RT-Thread的CAN驱动存在一些问题。当时并没有去记录,最近又因为这个驱动问题搞的一个头两个大。因为产品已经发到国外了,就算进行升级也是比较麻烦的。RT-Thread的CAN驱动在CAN没有出错的时候是可以正常工作的,一旦CAN总线出现一问题,这个驱动就变得不那么稳定了。我觉得在CAN总线发生故障状态下,这个驱动会出现问题的点有以下几个:rt_inline int _can_int_tx(struct rt_can_device *can, const struct rt_ca
2022-03-11 00:19:10 2245 2
原创 VideoCapture打开视频失败
前几天安装的OpenCV《小白-《学习OpenCV3》-安装OpenCV》在读取视频的时候一直打开视频文件失败。折腾了一下,发现是在进行配置的时候找不到ffmpeg。需要在安装依赖的时候多安装几个(不知道具体是缺失哪个依赖导致的问题):sudo apt-get install libgtk-dev -ysudo apt-get install build-essential git cmake pkg-config -ysudo apt-get install libpng-dev -ysudo
2021-07-31 17:41:59 2815
原创 小白-《学习OpenCV3》-安装OpenCV
这里写自定义目录标题小白-《学习OpenCV3》-安装OpenCV1、安装环境2、安装开发包3、下载OpenCV源码,编译,安装4、安装VScode5、第一个程序6、例程编译报错7、编译运行小白-《学习OpenCV3》-安装OpenCV1、安装环境树莓派4BRaspberry Pi OS with desktop2、安装开发包sudo apt-get install libgtk-dev -ysudo apt-get install build-essential git cmake pk
2021-07-25 22:33:52 742 1
原创 MCP2515驱动程序
下载链接 STM32芯片内部已有1个或2个CAN控制器,但是在有些情况下两个CAN控制器依然不够使用。将CAN网络合并,一是造成网络中数据量增加、总线拥挤,低优先级的ID报文发送实时性不够;二是合并网络后有报文的过滤问题。所以有些时候需要外扩一个CAN控制器。 这个下载资源提供了基于RT-Thread的MCP2515驱动程序,该驱动程序使用了RT-Thread的SPI驱动和CAN驱动框架,准确来说,应该是用SPI驱动读写MCP2515,然后将数据转给CAN驱动的底层,这样做的考虑是为了实现接口的统一
2020-11-28 09:15:49 2143 2
原创 查找算法之二分查找(插值查找)
对半查找和斐波那契查找对于元素关键字的整体分布没有要求,可以均匀分布,也可以不均匀分布。对于关键字分布不均匀且没有规律的情况,确实很难找到更好的方法提高算法的查找效率;但是如果查找序列的关键字分布均与,那么是可以利用这种均匀性来提高算法效率的,例如使用插值查找。 在关键字值分布均匀的情况下,使用插值查找可以提高效率,那插值查找的原理是怎样的?下面举一个例子:关键字2468...
2020-04-02 23:55:06 339
原创 查找算法之二分查找(斐波那契查找)
斐波那契数列 在数学中,斐波那契数列的定义是:fn={n(n=0,1)fn−1+fn−2 (n⩾2 )f_n=\left\{\begin{array}{lc}n&(n=0,1)\\f_{n-1}+f_{n-2}\;\;&(n\geqslant2\;\;\;)\end{array}\right.fn={nfn−1+fn−2(n=0,1)(n⩾2) ...
2020-03-31 20:29:05 2068 2
原创 查找算法之二分查找(对半查找)
当有序表采用顺序存储时,可以采用二分查找的方式查找指定关键字的元素。 二分查找的基本思想是选择表中某一位置i的元素A(i),设该元素的关键字为K(i),将K(i)与待查找关键字key比较。关键字k1k_1k1k2k_2k2K(3)K(4)K(5)……K(i-1)K(i)K(i+1)……K(n-4)K(n-3)K(n-2)K(n-1)K(n)...
2020-03-30 20:24:23 7532
原创 查找算法之顺序查找
对顺序存储的数据进行查找,最简单的算法就是从头开始,逐个检查。若能够在表中找到与给定关键字匹配的元素,则查找成功,否则查找失败。 这个算法可以非常简单的得以实现:typedef struct{ int key; int value;}s_eletype;typedef struct{ int size; s_ele...
2020-03-28 22:18:54 449
原创 RT-Thread中的链表结构
文章目录 RT-Thread中的链表是带表头节点的双向循环链表结构,它的表头节点与之前的博客《双向循环链表》中介绍的表头节点不同,之前博客介绍的表头节点与后继节点结构是一致的,只是因为考虑到指针类型问题,如果链表节点中指向后继节点或是前驱节点的指针类型出现了不一致,在访问过程中会更加复杂。RT-Thread中采用了别样的链表结构,让链表更加灵活。...
2020-01-23 13:32:21 2240
原创 双向循环链表
文章目录双向循环链表双向循环链表节点结构双向循环链表 在单向循环链表中,如果要在末尾插入一个节点,必须从head一个节点一个节点往后查询,尽管新建节点是插入在末尾节点和起始节点之间。在节点数较多的情况下,这一过程是费时的。此外,在实际应用中,有时需要逆向访问表中元素,这对单向链表或单向循环链表结构来说显然是困难的。为解决这一问题,可将链表设计成双向链表或双向循环链表。 以双向循环链表为例...
2020-01-21 10:15:59 391
原创 单向循环链表
文章目录 单向循环链表是将单链表尾节点的指针域置为起始节点的地址,而不再是NULL,这样从表中任一节点出发,均可访问到链表中的所有节点。 显然单向循环链表的节点类型与普通单向链表完全相同。...
2020-01-17 12:58:07 1123
原创 单向链表
文章目录单向链表基本概念单向链表的节点结构单向链表的操作构造单向链表节点单向链表的插入单向链表末尾插入单向链表有序插入单向链表基本概念 在基于指针的链式结构中,单向链表是最基本的。 在单向链表中,每个节点都有两个域,一个是用于存放数据元素的域Element,一个用于指向后继节点的指针域Link。 单向链表的第一个节点称为起始节点,指向起始节点的指针称为头指针,头指针为NULL的单...
2020-01-13 12:29:16 491
原创 STM32如何快速定位HardFault异常
STM32编程中,HardFault是比较常见的错误,如何快速定位问题在调试时非常重要。开启DEBUG模式,全速运行,如果MDK在遇到HardFault错误时没有自动停止,则手动按下STOP,这时软件自动跳转到HardFault中断的while处。Cortex-M3处理器在进入中断前,硬件会自动将8个字大小的栈帧压入堆栈NN+4N+8N+12N+16N+20N+24N+...
2020-01-11 22:49:58 1944
原创 FPM出现搜索不到cadence安装路径错误
FPM下载链接:在用FPM批量生成封装库的时候,有时候会遇到FPM搜索不到cadence安装路径的问题。如果已经安装了cadence,则大概率是环境变量问题。检查一下环境变量设置:CDS_LIC_FILE:D:\Cadence\LicenseManager\license.datCDSROOT:D:\Cadence\Cadence_SPB_17.2-2016CHDL_LIB_INST_D...
2020-01-09 09:53:07 2658 1
原创 串行通信(8250)
一、串行异步通信数据格式起始位数据位校验位停止位1位5~8位1位(可选)1位或1.5位或2位注: 停止位在8250寄存器中只有一位bit控制,为0则为1位停止位,为1则由8250根据数据位自动选择1.5位(5位数据)或是2位(大于5位数据)停止位。波特率:时钟信号与波特率一般有一定的比率关系,例如:16倍、32倍、64倍。如果时钟速率是信号速率的16...
2019-11-30 21:23:35 8769
原创 指令系统与汇编程序设计简答
(1)、什么叫指令?什么叫指令系统?8088指令系统有哪几种类型指令?指令是CPU执行某种操作的命令。CPU全部指令的集合称为指令系统。8088的指令类型有传送类、算术运算类、逻辑运算类、转移和调用指令等。(2)、什么叫寻址方式?8088指令系统有哪几种寻址方式?寻址方式是指CPU获取操作数的方式。寻址方式的种类:立即数寻址、寄存器寻址、内存操作数寻址(3)、何为汇编语言程序...
2019-11-30 19:08:03 536
原创 输入/输出系统简答
(1)、什么是接口?接口是CPU与外部设备之间的连接部件,是CPU与外部设备进行信息交换的中转站。(2)、为什么要在CPU与外部设备之间设置接口?CPU与外设二者的信号不兼容,包括信号线的功能定义、逻辑定义和时序关系。CPU与外设的速度不匹配,CPU的速度快,外设的速度慢。CPU与外设之间若没有设置接口,则外设的硬件结构会依赖于CPU,对外设的发展于更新不利(3)、微型计算机的接口...
2019-11-30 19:07:09 649
原创 8086中断系统简答
(1)、什么是中断?什么是中断源?中断系统应该具备什么功能?CPU暂停执行现行程序,转而处理随机事件,处理完毕后再返回中断的程序,这以过程称为中断。能够引发CPU中断的信息源,称为中断源。中断系统应具备以下功能:为了加强中断系统的灵活性,对于硬件设备的中断请求,应当具有屏蔽和开放的性能,使得程序员能够灵活控制。能实现"中断判优"即中断源排队,当有多个中断源提出请求时,能够优先响应高级...
2019-11-30 19:06:08 6252
原创 8237A DMA控制器简答
(1)、比较中断和DMA两种传输方式的特点。在中断模式下,外设需与主机传送数据时要请求主机给与中断服务,中断当前主程序的执行,自动转向对应的中断处理程序,控制数据的传输,过程始终是在所执行的指令控制之下。在DMA模式下,系统中有一个DMA控制器,它是一个可驱动总线的主控部件。当外设与存储器之间需要传送数据时,外设向DMA控制器发出DMA请求,DMA控制器向CPU发出总线请求,取得总线控制权后...
2019-11-30 19:04:55 4649
原创 使用PTR运算符的情况
一、双操作数指令中(如MOV,ADD,SUB等指令)源操作数为立即数,目标操作数为直接寻址的存储器操作数,当两者类型属性不一致时,存储器操作数必须用PTR临时修改其属性,使源操作数和目标操作数类型一致。源操作数为立即数,目标操作数为间址,变址,基址或基址加变址寻址的存储器操作数,无论两者类型属性是否已经一致,存储器操作数必须用PTR显式说明其类型属性,使得源目操作数类型属性一致。源操作数和...
2019-11-30 19:02:37 2572
原创 软件中断调用
DOS功能调用DOS中断号范围:0x20H~0x3FH,总共32个中断向量INT 21H01H号子功能: 等待从键盘输入一个字符,同时将该字符显示在显示器上入口参数:无出口参数:AL=按键的ASCII码02H号子功能: 显示一个字符入口参数:DL=待显示字符的ASCII码出口参数:无07H号子功能: 等待从键盘输入一个字符,但该字符不显示在显示器上,不响应CTRL_C...
2019-11-30 19:01:31 1243
原创 8086处理器的内存寻址方式
8086处理器的内存寻址方式主要分三种寄存器寻址立即寻址内存寻址(也有书叫存储器操作数寻址)寄存器寻址最简单的寻址方式就是寄存器寻址。也就是指程序执行时,操作的数就存放在寄存器当中,可以直接从寄存器中取得。例如: mov ax ,bx mov cx ,0xf000 inc cx这些都涉及了寄存器寻址。第二条指令中的目的操作数是寄存器寻址方式,因此该操作数也是寄存器寻...
2019-11-30 18:59:44 2063 1
原创 中断系统简答
(1)、什么是中断?什么是中断源?中断系统应该具备什么功能?CPU暂停执行现行程序,转而处理随机事件,处理完毕后再返回中断的程序,这以过程称为中断。能够引发CPU中断的信息源,称为中断源。中断系统应具备以下功能:为了加强中断系统的灵活性,对于硬件设备的中断请求,应当具有屏蔽和开放的性能,使得程序员能够灵活控制。能实现"中断判优"即中断源排队,当有多个中断源提出请求时,能够优先响应高...
2019-11-29 20:14:00 76
原创 Altium Designer元件库
Altium Designer元件库这是个人收集整合的AltiumDesigner元件库,元件种类可能并不多,主要是一些常用元件,库中大部分元件都配有3D封装。可以在设计和拉线的时候更好的了解每个元件的摆放,及各元件的干涉情况。工程示例...
2019-10-26 11:48:15 4057 2
原创 LwIP学习笔记—find_entry
初次接续网络,花了大把时间啃源代码,好在数据组织结构不是很复杂,一路下来还算顺利.此次写下这篇博客,仅作为本人学习路上的一篇学习笔记函数find_entry的本质是做一个查找,对缓存表进行顺序的查找,可以分为3个步骤第一步:查找整个缓存表,找出和目的IP地址匹配的表项(该表项一定处于pending或stable状态),若找到,则返回位置引索,找不到,进行下一步第二步:说明表中没有相关表项...
2016-12-10 11:10:00 77
pyimagesearch.com-Install OpenCV 4 on Raspberry Pi 4 and Raspbian Buster.pdf
2021-07-31
Jesse_Library.IntLib
2019-10-25
单级ABA52563射频宽带放大&PE4302;程控衰减.7z
2019-08-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人