自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 【Luckfox pico入门记录(二)】ubuntu22.04系统烧录

最近在看智能手表的选型,但是作为一个小白的我,发现要么,不适合作为手表(大多数核心板的面积都在4*4以上,而且而是那种立着的天线。而Luckfox因为其体积小还在我的备选列表内。但是Luckfox自带的busybox非常low,然后交流群里有大佬尝试用buildroot自定义了文件系统(比如加入了python),整合进luckfox的sdk中进行重新编译(但是这个我暂时还没有成功)。也有大佬直接发出来了移植成功的ubuntu22.04(我刚刚试验了一下成功了),所以先来讲一下这个。下面正式开始。

2023-10-29 21:44:27 1090 4

原创 【架构艺术】(零) 环境搭建

今天尝试了如systemC,Chisel,MyHDL等方式来进行功能仿真,并生成波形到Wavedrom格式,后来发现对于学习这些简单架构,还是脑子里面根据规则进行仿真或者是编写verilog代码进行仿真即可。所以我们的环境依赖只有:安装wavedrom,点击安装即可必须要喷一下的是,它现在的icon真的好丑软件的教程可以参考附上学习参考:书籍:SOC设计方法与实现(第三版)、硬件架构的艺术知乎:链接在正文CSDN:链接在正文下面直接进入学习。

2023-10-13 01:20:40 423

原创 【Luckfox pico入门记录(一)】开发环境与工具链

最近刷bilibili发现微雪电子关于luckyfox pico的介绍视频,感叹linux开发板居然可以把价格缩到100RMB以内,也正巧结束了复旦微比赛,受够了FM33LC046N的低性能,来玩点便宜又高性能的板子。开发板型号:luckfox pico max开发环境:Ubuntu 22.04。

2023-10-06 20:07:27 3020

原创 一、基于RV32I ISA理解CPU结构

本文参考书目:《计算机组成,软硬件接口,Risc-V版》CPU结构和指令集是分不开的,因此,我们在使用HDL语言实现CPU之前,首先了解其指令集。

2023-07-20 18:46:30 256

原创 【协议项目之 I2C】(一) 基本时序与实现

I2C协议(集成电路总线)使用两根线SDA和SCL实现数据传输,其连接如下图所示,总线上通过上拉电阻可以挂载各种低速外设,例如传感器等。使用I2C,可以将多个从机(Slave)连接到单个主设备(Master),并且还可以有多个主设备(Master)控制一个或多个从机(Slave)。

2023-03-31 13:42:07 1723 1

原创 【基础篇0】Linux下ANACONDA与TF-LITE环境配置

对于Linux系统,我发现不管是电脑x86的Ubuntu还是树莓派arm的raspberry系统,在系统安装完毕后,总是自带一个特定版本的python.例如我的ubuntu22.04自带的python版本是3.10,而高版本的python不一定能向下兼容第三方库,例如我要安装tf-lite时,会有以下结果红字的意思就是没有找到满足适配当前python3.10版本的库,因此导致无法安装,无法使用。因此面临两个解决方案方案1.删除原系统的python,再重新安装新的python。

2023-02-26 01:31:16 978

原创 【SOC架构】(一)同步与异步信号

本章节主要参考《SOC设计方法与实现 第三版》也是整个SOC架构学习的起点,下面我们正式开始!GALS(Global Asynchronize Local Synchronize),即全局异步局部同步,这是顺应了多核SOC设计的潮流同时也符合EDA工具对同步电路设计的广泛支持。回顾:同步电路同步电路的定义触发器、寄存器都由一个统一的时钟控制。并且在同步电路中,为方便后端设计,一般使用统一触发方式(上升沿或下降沿中的一种)同步电路时序收敛:满足触发器的建立时间和保持时间。

2023-02-06 15:33:25 2503

原创 【屏幕驱动移植】点亮OLED屏幕并播放视频

  硬件软件准备:  因为在嵌入式系统中,由于硬件的多样性,移植驱动是常见的事情,本文适合作为驱动移植的小练习。个人认为,驱动移植主要考察读代码和修改代码,说白了就是把别人写好的东西搬运一下,然后将其修改以适应目标平台,使目标平台可以成功运行,就完成了移植的工作。  整体思路:就是我买来了一块屏幕,然后一般买一个设备,厂家会提供datasheet,甚至使一些开发文件。如果仅仅有datasheet,要么就自己写驱动,要么就去网上找下载驱动。如果厂家提供了,那么就可以移植。这里厂家是给我提供了驱动资料的,但是我

2023-01-11 20:16:25 1927 3

原创 【数集项目之 MCDF】(五) 最终整合:MCDF顶层文件

因此我在代码里面加入了`include语句,而如果是其他集成开发工具,会通过用户菜单窗口将代码添加进来,就不需要`include语句。需要注意的,为了代码的方便管理,我将每个子模块都放在一个文件夹内,因此`include需要不能不指明路径(因为这只适用于引用文件和被引用模块在同一文件夹下的路径),因此include如下。根据结构图的连线,在顶层模块中引入前面的子模块,根据使用的工具不同,使用的方法略有区别。当然,由于握手机制等一些信号检查在顶层模块中,更容易进行检查,也容易进行调整各个模块的协作关系。

2022-12-14 13:56:06 1429

原创 【数集项目之 MCDF】(四) 整形器 formatter

因为设计文档说相邻数据包之间间隔至少1个时钟周期,而上下级握手是需要时间的,因此不需要再额外空出一个周期。(必须是就绪的,有包可以发送的)。(因为之前的设计还没有涉及到握手时序,波形不满足,所以我又修改了一下,现在slave中波形就满足了时序关系,如下图黄色波形所示)相邻的数据包之间应至少有一个时钟周期的空闲,即fmt_end变为低电平后,至少经过一个时钟周期fmt_req才可以再次置高。仿真结果如下,同样地,因为涉及到上下级时序配合,因此此处也省略波形分析,将在最后的MCDF顶层仿真中进行详细分析。

2022-12-13 15:32:51 852

原创 【数集项目之 MCDF】(三) 仲裁器 arbiter

有了综合优先级生成和比较,这样我们就能找出优先级最高的通道了,每次arbiter或者更高级请求发送数据包时,我们只要比较一下当前优先级最高的通道(刷新综合优先级),然后直接选通对应通道,将各种信号按照文档中给的对应关系进行wire连接就可以了。表示,而考虑到复位情况不能选择任何一个通道(因为可能3个通道都没接收足够数据发送),并且对于这么多arbiter输出信号复位赋值语句较多,因此这里设置一个。根据设计文档,我们知道从输入总共有3个通道,而这三个通道很有可能都接收到数据可以进行发送。

2022-12-12 22:17:50 1654

原创 【数集项目之 MCDF】(二) 从输入端 slave_FIFO

代码主体通过两个always实现,分别是读always和写always,不同于控制寄存器,FIFO是可以同时读写的。但是,上一章也提到,由于位宽限制,除了64之外的余量都按照其本身表示,而64表示为63.综合以上逻辑,代码如下所示。的作用是跟外界(即发送数据的模块,这个不再我们设计的范围内)通信,告诉它这个数据并没有接收,让其重新发送。由于除了从端的输入复位之外,还有通道使能和复位有关,因此FIFO的复位信号应该是以上两个信号相与。注意读写的条件,除了读写有使能之外,还要满足读的时候非空,写的时候非满。

2022-12-12 17:10:39 848

原创 【数集项目之 MCDF】(一) 控制寄存器 control_register

本项目为MCDF数据整形器设计,所有的参考代码见我的github其中设计的参考文档见github文件中的MCDF修订版.docx文件。选择的工具链是,相关工具的安装与环境配置就不介绍了,可以参考其他文章。注意:不同的工具链代码可能有区别,例如一些集成开发环境不需要书写`include,而是直接将代码加入工程作为替代MCDF模块按照子模块划分,总共分为了、slvae_FIFO、arbiter、formatter这几个子模块和MCDF这个顶层模块。本章首先从控制寄存器。

2022-12-12 11:52:12 1597 2

原创 【Linux C编程】(一)POSIX多线程及读写优先算法

参数1:指向pthread_t的指针或者地址,pthread_t是pthread库定义的数据类型,用来引用线程。参数3:线程函数,需要定义为void *类型,返回指向空的指针.并且在传入时要转换成void * 类型。(或者在Cmake中使用target_link_libraries)参数4:传递的参数,直接传入指针。多个参数传入结构指针。这是Linux C的多线程库,需要添加头文件。同时编译时需要链接库。terminal执行。

2022-11-29 22:03:57 307

原创 【从零到一的Raspberry】数莓派踩坑实录(二) 内核编译配置和模块安装

本次作业具有挑战性,不过不管哪一环节出错了,你都要知道如何把它还原到初始状态,这样你就不是在危险地操作,而有还原的保障.因此在第0节我会介绍一种还原数莓派系统的方法,大家可以仔细看一下,也可以直接看红字,跟着红字操作,你就可以在内核无法运行时还原到默认系统!后面从第一章开始,带序号的小节会指引你完成本次"内核裁剪"作业.加油!【声明】:本文章核心内容主要参考数莓派官方网站,一切以官方网站上的指令为准,敬请访问【NOTE】:如果你想要着手快速开始,请直接到序号索引的小节。

2022-11-10 02:11:15 886 4

原创 【RP2物联网实战(一)】C/C++&FreeRTOS版

树莓派pico,又称为RP2,其开发方式多种多样,有C语言和micropython语言,工具有cmake,vscode,arduino,thonny等,本版主要使用的工具链是VsCode结合cmake、官方提供的SDK——pico-sdk和移植的FreeRTOS。交叉编译踩坑指北现在默认你已经完成了环境的搭建,让我们来概括性的认识一下我们所搭建的工具链。因为文档比较长,秉承着用到哪学哪的理念,我使用较多的为gpio、time还有adc功能。函数功能初始化管脚设置gpio方向输出高/低电平。

2022-11-06 15:19:56 2147

原创 【从零到一的Raspberry】树莓派踩坑实录(一)系统安装与简单开发

本系列作为树莓派上手记录,同时将本人的踩坑以及参考进行记录汇总,必要时罗列出小组分工,作为《嵌入式软开》小组参考文件。

2022-10-26 09:58:51 1924

原创 【交叉编译踩坑指北(四)】VScode构建数莓派Pico的FreeRTOS系统

我们在第二章和第三章中分别讨论了在windows x86平台下和linux x86平台下使用CMake实现交叉编译,成功点亮数莓派.由此可见CMake强大的跨平台功能.因此,后面的章节仅以一种平台为例,如果想要使用另一种平台或者其他平台(如MacOS),相信你参考前面的章节也可以快速迁移学习.

2022-10-18 19:22:36 987

原创 【交叉编译踩坑指北(三)】Linux下VScode构建数莓派Pico开发环境

第二章表明,arm-none-eabi工具虽然单独使用会报错,但是只要结合CMake就可以正常使用.而Window系统下,使用CMake调用,那么是不是可以在Linux下使用CMake调用Linux原生make(即)构建目标文件呢?这个问提就好比出发点相同(都是CMake),中间的路可能有区别(一个是MInGW Makefiles一个是Unix Makefiles),但最终目标一样(都是调用arm-none-eabi-gcc/g++进行编译),按照道理来说大同小异.这也符合CMake跨平台的特性.

2022-10-18 14:00:21 934

原创 【交叉编译踩坑指北(二)】windows10下VScode构建树莓派pico开发环境(C/C++)

许多树莓派C/C++开发都依靠NMake以及PicoProjectGenerator,安装配置NMake较为麻烦。需要安装VisualStudio 生成工具,并且安装文件夹下有很多版本的nmake需要筛选,暂时没有解决。因此本章主要使用windows中常用编译C/C++的mingw工具链(包括了mingw下的gcc,make以及gdb等),包括MinGW Makefiles来进行树莓拍Pico C/C++开发。这也沿袭了第一章中的mingw使用,具有一致性。

2022-10-18 01:36:12 4025 2

原创 【交叉编译踩坑指北(一)】windows10下Vscode与Cmake编译生成文件

CMake是一个跨平台的Makefile生成工具cmake执行CMakeLists.txt生成Makefiles,然后make执行Makefiles,调用Makefiles中一系列gcc编译生成可执行的目标文件在这个过程中,make有不同的工具,gcc也有不同的工具,因此在整个工具链中需要进行配置。例如如果是生成windows可执行文件,Cmake就要配置生成MinGW Makefiles,执行Makefiles要选择mingw32-make,编译器要选择x86_64-w64-mingw32-gcc。

2022-10-17 14:46:54 4845

原创 【嵌入式开发工具】Makefile和Cmake

但是加入头文件中有一些宏定义,例如。判断这个目标是否存在,若这个目标已经存在了,并且它的依赖文件即main.o和primejudge,o文件的时间戳比div2prime更老,则不再进行连接生成文件。如果对其进行修改,改成2,再执行make的话,make并不会编译连接新的文件,这是因为没有把这个.h的头文件加入到依赖关系中来,Makefile就无法根据其时间戳的规则来决定是否要重新编译连接。可以在命令行中观察到哪些块中的命令被执行了,也可以看到其执行顺序,进一步证实了上述根据依赖关系的Make执行顺序。

2022-10-03 20:10:01 2183

原创 verilog移位寄存器实现序列检测

请编写一个序列检测模块,检测输入信号a是否满足011XXX110序列(长度为9位数据,前三位是011,后三位是110,中间三位不做要求),当信号满足该序列,给出指示信号match。寄存器中存入的数据就表示当前连续9bit的内容,将对应位与需要检测的数据进行比较,如果满足要求则输出检测到序列的标志。,由于本题序列较多,而且默认是重复序列检测,因此考虑到重复性,需要对X进行分类讨论(有可能存在含X构成的重复序列),本题需要检测的序列总共9位,因此将移位寄存器设置为9位,clk触发,rst_n复位的同步电路。

2022-09-25 15:36:39 1084

原创 verilog边沿检测

这里需要注意的一点是,rise_mid由于是直接通过门与前序信号相连,因此输入a信号可能会引入x不确定态,会传输到输出。根据波形变换的思想,我们发现只要将~a_buff和a进行与运算,得到的结果就是从a上升沿开始,到下一个clk上升沿的波形。有一个缓慢变化的1bit信号a,编写一个程序检测a信号的上升沿给出指示信号rise,当a信号出现下降沿时给出指示信号down。注:rise,down应为单脉冲信号,在相应边沿出现时的下一个时钟为高,之后恢复到0,一直到再一次出现相应的边沿。testbench 如下。

2022-09-23 13:55:19 420

原创 【嵌入式C编程】keil图像旋转仿真

可以看到,其中第一部分和第三部分都是在嵌入式系统外进行操作的,这里选择采用python脚本进行处理,因为python具有强大的numpy库方便对文件以及图像矩阵进行大量处理,此外还有PIL库方便图像显示。随便打开一个hex文件,其部分如下图,在debug运行之前,需要在memory map中对我们使用到的存储图像的空间进行初始化申请,否则会出现无法进入main函数,跳入软件中断的情况。因此,在main.c函数中加入了简单的插值函数,即某一点若值为0,则把其上下左右四个点的均值作为其灰度值,并进行刷新。

2022-09-22 19:00:18 1005 1

原创 Verilog练习1

只有1 xor 0=1因此当1 xor 0 时不变号,忽略0在xor中的作用。当1遇到奇数个1互相xor时结果为1,而1xor 偶数个1时结果为0,而中间遇到多少个0并不影响结果。由于这题状态转换并不复杂,因此仅仅设立单状态mini_state,而不用状态转换模型。超过2路的考虑用基本两路复用器级联。本题难在1.审题,sel的功能是当sel为0时输出check取反。这题需要注意的是串连的是T触发器而不是D触发器,审题很重要。需要注意的是每次时钟脉冲到来时,判断的是前一瞬间的值。同时不要忘记阻塞赋值的习惯。

2022-09-11 17:11:26 431

原创 RV32汇编基础

*函数调用不保留寄存器:**可能会被调用函数更改的寄存器,有参数与返回值寄存器a0-a7,返回地址寄存器ra,临时寄存器t0-t6。s0-s11,对应编号x8-x9和x18-x27的寄存器用来作为保存寄存器,保存原来进程中的关键数据避免在函数调用过程中被破坏,也用于保存函数中的值。a0-a7,即x10-x17寄存器,用来向调用函数传递参数,a0,a1寄存器常常用于传递返回值。栈LIFO也是存储系统的一部分,需要一个指向它的寄存器来保存它的基地址。个寄存器,容量只有128B,x0~x31,其中。

2022-08-20 13:55:15 1596

原创 【DS基础】树与二叉

树的递归式定义: 树Tree 是n(n>=0)个节点的有限集。n=0称为空树。在任意一棵非空树中:(1)有且仅有一个特定的结点,被称为 根(root) ;(2)当n>1时,其余节点可以分为m(m>0)个互不相交的有限集T1、T2 、Tm,其中每一个集合本身又是一棵树,并且称为根的 子树(SubTree) 。结点的分类: 结点拥有的子树个数称为结点的度(Degree) 度为0的结点称为叶结点(Leaf)或终端结点。否则称为非终端结点或分支结点,除了根结点外,分支结点称为内部结点。树的度是树内各结点度最大值。.

2022-07-23 20:23:33 515

原创 【DS基础】栈与队列

定义:栈(Stack)是限定仅在表尾进行插入和删除操作的线性表。允许插入删除的一端成为栈顶(top),另一端成为栈底(bottom),不含任何数据元素的称为空栈。栈又被称为LIFO(Last In First Out)结构。可以形象得与手枪弹夹做对比。......

2022-07-04 20:42:51 216

原创 【DS基础】静态链表

目的:为没有指针的程序语言所设计的实现单链表的方法静态链表(游标实现法)数组的元素被分为两个数据域data和cur

2022-06-17 23:17:21 395

原创 【基于侧扫声呐和SFS方法的地形三维重构】(二)侧扫声呐SFS数学模型建立

本文主要参考文献如下[1] 赵建虎,尚晓东,张红梅. 侧扫声呐图像反演海底地形的一种线性算法[J]. 哈尔滨工业大学学报,2017,49(5):80-86. DOI:10.11918/j.issn.0367-6234.201508051.[2] Ruo Zhang, Ping-Sing Tsai, J. E. Cryer and M. Shah, “Shape-from-shading: a survey,” in IEEE Transactions on Pattern Analysis and M

2022-04-08 21:38:27 1170 2

原创 【基于侧扫声呐和SFS方法的地形三维重构】(一)增益补偿和斜距校正

本文主要参考文献如下[1]王杰英. 侧扫声呐图像的三维重构[D].浙江大学,2018.\qquad这里先向学长表示感谢!本文主要讲述了侧扫声呐原始图像需要进行的一些信号处理与图像处理步骤(增益补偿与斜距校正,其他处理步骤会在接下来的章节进行介绍)\qquad有关侧扫声呐三维重构的全流程可以参考以下文章,它以南海沉船为例,详细地阐述了侧扫声呐SFS三维重构的全过程[1]刘小菊,施祺,杨红强,周胜男.基于侧扫声呐影像的南海珊瑚礁沉船及周边地形重建[J].热带地理,2020,40(02):278-

2022-04-03 16:49:36 4048 1

原创 【SFS线性化算法】松弛迭代SFS(一)

本文主要翻译和讲述 Ulic的线性化SFS方法,关于松弛迭代算法及其在侧扫声呐中的应用将在之后的章节中进行介绍[1]Ulich, G. Provably Convergent Methods for the Linear and Nonlinear Shape from Shading Problem. Journal of Mathematical Imaging and Vision 9, 69–82 (1998). https://doi.org/10.1023/A:1008222227032

2022-03-29 21:21:02 745 1

原创 【嵌入式系统】旋转POV显示屏的实现

\quad 基本功能:本项目主要实现了单叶片灯条高速旋转时由于视觉暂留现象产生显示效果,清晰度与屏幕相当,在黑暗环境中可以达到浮空显示的全息效果。灵感来源于https://www.bilibili.com/video/BV1Wy4y1a7t6/?spm_id_from=333.788.recommend_more_video.-1项目实现完全自主设计,未参考任何开源项目\quad 基本原理:根据电机转速n,求出每一圈的时间△t△t△t,然后人为地对一圈均匀划分m份,划分数越高,分辨率也越高,同时

2022-03-12 14:34:02 3119 5

原创 【Verilog】频率计再设计

曾在2020年7月使用VHDL在FPGA上实现了频率计,但是那时尚未了解状态机,设计方法不够系统,现在重新用Verilog语言进行再设计\quad功能需求:使用计数方法进行频率测量,主要分为三个量程(0-100Hz,100-999Hz,1k-10kHz),并且具有溢出提示,小数点、单位显示和锁存功能,自动根据输入选择量程并显示\quad基本原理:测频率最简单的方法就是计数法,例如在1s内进行输入波计数,1s闸门脉冲后锁存的数及时频率(计数器未溢出的情况下)。此外,由于本设计是三量程,在1000计数器小于

2022-03-11 17:15:50 1263

原创 【模电仿真】RC桥式正弦波发生电路

\quad参考书籍:童诗白version5version5version5\quad错误更正:书上LM324AJ不可用,换为LM2924N\quad线路图如下\quad波形如下

2022-03-09 00:50:51 2223 10

原创 基于Shape From Shading(SFS)原理的侧扫声呐海底三维重建项目进度记录

\quad本文主要用于记录“海底三维重建算法研究”课题毕业设计的进度与内容概括\quad 2021.12.24−2022.1.152021.12.24-2022.1.152021.12.24−2022.1.15 确定了海底三维重建的具体方式:基于侧扫声呐和SFS原理\quad 2021.1.15−2022.1.202021.1.15-2022.1.202021.1.15−2022.1.20 研究了侧扫声呐的工作原理和利用侧扫声呐实现海底重建的全流程,为后续对具体步骤的研究提供纲领性指导。刘小菊,施

2022-03-07 13:40:34 737

原创 【SFS线性化方法】Tsai方法在侧扫声呐中的应用(二)

本篇主要阐述图像预处理部分和像素到高度的转换,以及DV软件和XTF文件的分析与使用一、XTF文件解析\quad\quad首先是xtf文件格式的定义,是在 https://www.ecagroup.com/上有官方定义,目前(2022)最新的版本是Rev.42,我们首先先研究一下该文档,从而为xtf文件解码做准备。需要提一下的是,在解析的过程中,需要方便查看xtf文件,推荐使用ultraedit软件,其他软件解码时出现部分错误,会产生一定的误导。\quad\quad在分析之前,需要了解一个概念,就是字节

2022-02-18 23:51:31 993 4

原创 【SFS线性化方法】Tsai方法在侧扫声呐中的应用(一)

1、SFS简介与朗伯模型 SFS(Shape From Shading),即明暗还原形状,是一种根据图像灰度强弱预测并恢复物体形状的方法。 经典的SFS分为最小化法、局部分析法、演化法和线性化法。其中线性化法代表有Horn、Pentland和Tsai方法等,国内有赵建虎的补充等等。 SFS大多都依赖一个基本的原则:即兰伯特(Lambertian)反射模型(又称朗伯模型)。即反射体向各个方向反射强度相同,都与入射光和入射点表面法线之间的夹角的余弦值成正比。 即              E∝cos&

2022-02-13 16:31:32 2441 3

原创 侧扫声呐XTF格式数据获取

https://chesapeaketech.com/download-sonarwiz/网站提供了完整的xtf数据集,位置是哈德逊河和旧金山湾区,质量比较高

2022-01-29 22:54:37 1796 3

S3CA410芯片GPIO配置实现流水灯

S3CA410芯片GPIO配置实现流水灯

2022-10-21

【嵌入式系统】非对齐字的读写、宏函数的编写

【嵌入式系统】非对齐字的读写、宏函数的编写

2022-10-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除