前言 (1)PLCT实验室实习生长期招聘:招聘信息链接(2)学习本文之前,要求先看一下Milk-VDuo快速上手的环境搭建部分,创建好镜像文件。 正文 编译milk-duoqemu (1)下面步骤基本上没有问题,我测试过了。在make过程中,可能会出现一些错误,大概率是一些环境没有安装,根据提示进行安装即可。一般不会有问题。编译过程时间很长,可能需要一个小时,等他进度条跑完之后即可(如下图)。 gitclone-bduo-qemuhttps://github.com/plctlab/plct-qemu.git cdplct-qemu/ mkdirbuild cdbuild/ ../...

前言 (1)讲良心话,如果是想真心了解句柄是什么的,就直接看代码。国内由太多关于句柄的一些专业术语了。反正互相抄,这些垃圾文,我也懒得喷,因为大家都在骂,我就不凑热闹了。(2)不过,唯一让我感到诧异的是,这些垃圾文的收藏量居然惊人的高,以至于明明国内一大批讲解句柄是什么的。却在交流群中常常能够看到很多人问,句柄到底是什么。(3)我也不想自夸,反正呢,我只能保证这篇博客和网上哪些动不动一堆术语无脑堆的不同。我直接上代码。(4)事先叠甲,本文需要一定的C语言指针基础。零基础铁定看不懂 实例代码讲解 (1)国内网站已有大量这种堆术语的,我就不再赘述,直接上实际代码。(2)以我最近移植的一款A...

前言 原文链接 https://devzone.nordicsemi.com/nordic/nordic-blog/b/blog/posts/accelerate-iot-development-with-nrf-connect-for-vscode 原文前言 Developmenttoolsareessentialforembeddedsoftwaredevelopers,especiallythosecraftingembeddedsoftwareforIoTproductstypicallycenteredaroundresource-constrainedwirelessSoC...

前言 (1)在学习数据结构链表部分的时候,老师给出了几个题目。其中两个题目采用了快慢指针的技术,感觉有意思,于是写一篇博客记录一下。 快慢指针 (1)我们先来介绍一下快慢指针技术。这个说起来其实很简单,就是龟兔赛跑问题。(2)兔子跑的比乌龟快,我们可以利用这个特性,来解决一些实际按理。 求链表的中间结点 原题链接 (1)原题链接:https://leetcode.cn/problems/middle-of-the-linked-list/description/ 分析 (1)此题的核心目标是找到单链表的中间节点。如果是顺序表,就非常简单,直接采用sizeof()知道顺序表的大小...

前言 (1)休闲时刻刷B站,看到一个卖课的,发视频问,chararr1[]={‘H’,‘E’,‘L’,‘L’,‘O’};和chararr2[]=“HELLO”;区别是什么。(2)看那个卖课博主一顿分析,最后成功得出:字符串比字符数组末尾多一个’\0’。(3)很好,成功浪费我生命的3分钟。无语,就这水平还卖课。如果各位有幸看到这货,希望能够保持清晰,不要被这种无良卖课机构欺骗。(4)为了防止被当成地图炮,我声明一下,我只diss那种没啥实力乱忽悠的买课机构。对于教干货的培训机构,我还是保持尊重态度的! 浅层分析 存储大小 (1)就像那个卖课说的一样,字符串比字符数组末尾多一个’\0’。因...

前言 (1)如果有嵌入式企业需要招聘湖南区域日常实习生,任何区域的暑假Linux驱动实习岗位,可C站直接私聊,或者邮件:zhangyixu02@gmail.com,此消息至2025年1月1日前均有效(2)要做个小玩具,正好需要这种轻巧的芯片。其他厂家的芯片其实可以,但是为了快速开发,我还是选择了ST的芯片。选型方面,本来打算选择8pin的芯片,不过为了以防后续调整增加引脚重新画PCB很麻烦。所以折中选择了STM32G030F6P6芯片作为这次玩具的主控MCU。(3)ST的芯片上手还是挺容易的,我就直接放图了,不多BB。 正文 STM32CubeMX配置 (1)为了让STlink下载程序...

前言 (1)volatile关键字作为嵌入式面试的常考点,很多人都不是很了解,或者说一知半解。(2)可能有些人会说了,volatile关键字不就是防止编译器优化的吗?有啥好详细讲解的?那么,我就反问一句,为什么要防止编译器优化,编译器优化什么?编译器优化之后会产生什么问题?(3)今天我就来详细解答一下这些疑惑。 软件延时所造成的bug (1)在初学51单片机的时候,我们都是使用软件延时,例如下面是STC89,12MHZ晶振的1ms的软件延时。(2)有些人说,这样写延时可以啊,没有问题。但是,假如你在MSP430中这样写,一定会产生bug。你会发现,软件延时没效果。(3)这个时候,有些人...

前言 (1)如果有嵌入式企业需要招聘校园大使,湖南区域的日常实习,任何区域的暑假Linux驱动实习岗位,可C站直接私聊,或者邮件:zhangyixu02@gmail.com,此消息至2025年1月1日前均有效(2)最近做I2C设备移植过程中,出现了一些小问题。为了方便定位到底是硬件问题还是程序有问题,根据师傅的提醒下,打算使用示波器对I2C数据进行解析。 数据解析 示波器配置 (1)关于示波器如何使用,以及如何接线我就不赘述了。因为不同的示波器使用不太一样,具体看示波器的操作手册。不过下面这两个配置基本都是一样的。<1>设置捕获SDA下降沿(也就是黄色的线)。因为I2C规定...

前言 (1)今天在使用ESP32S3的时候,做移植测试的时候,不知道为什么出现了看门狗报错。简单查了一下,测试发现是任务阻塞导致的。 报错 (1)报错信息如下:<1>E(5368)task_wdt:IDLE(CPU0)中可以知道,应该是CPU0所产生的报错。<2>E(5368)task_wdt:CPU0:可以知道是在CPU是在执行main函数的时候出现的喂狗失败。(2)于是,我们查看mian函数,可以知道他一直在进行数据打印,并没有放弃过CPU。这样会导致其他任务无法执行。 E(5368)task_wdt:Taskwatchdoggottriggered.T...

前言 (1)此系列文章是跟着汪辰老师的RISC-V课程所记录的学习笔记。(2)该课程相关代码gitee链接; 正文 (1)在跟着汪辰老师做OS文件夹的实验时候,我先使用makeclean将文件清空,然后再使用make编译出现了如下报错 riscv64-unknown-elf-gcc-nostdlib-fno-builtin-march=rv32ima-mabi=ilp32-g-Wall-c-ostart.ostart.S start.S:Assemblermessages: start.S:11:错误:unrecognizedopcode`csrrt0,mhartid' (2...

前言 (1)如果有嵌入式企业需要招聘校园大使,湖南区域的日常实习,任何区域的暑假Linux驱动实习岗位,可C站直接私聊,或者邮件:zhangyixu02@gmail.com,此消息至2025年1月1日前均有效(2)因为实习,需要使用ESP32S3进行开发,而乐鑫官方的esp32_s3_box.c并不是完全符合我们的要求,所以我被安排了解一下esp32的启动流程,然后根据乐鑫的esp32_s3_box.c文件编写一个适配我们自己产品的板级支持包。接下来我根据乐鑫官方文档以及结合自己的理解,梳理一下启动流程。(3)乐鑫的启动文件个人认为还是有点意思的,因为在我的认知里面,启动文件一般都是采用的...

前言 (1)此系列文章是跟着汪辰老师的RISC-V课程所记录的学习笔记。 (2)该课程相关代码gitee链接;(3) (4)在配置RSIC-V工具链的时候,踩了很多坑,虽然网上也有同类型的文章,并且riscv-gnu-toolchain仓库的readme已经进行了讲解。但是我还是斗胆写一个小白能够看懂的RSIC-V工具链配置教程。(5)强调两点:<1>因为RSIC-V是比较前沿的产物,所以对汉语的支持并不高,因此建议在Linux环境中尽量使用英文路径处理RSIC-V相关文件。<2>Windows和Linux的换行符是不一样的,可能因为换行符的不一致,导致编译过程产生...

前言 (1)最近刚做完ESP32的一个模块的驱动移植,使用到了I2C。感觉ESP32的硬件I2C还是挺容易使用的。(2)本文将只会介绍ESP32的硬件I2C使用,如果想知道软件I2C使用,可看其他的任意一款芯片软件I2C实现流程,都是一样的东西。(3)注意,本人只会介绍常用的函数接口。其他的可自行阅读乐鑫官方I2C驱动文档。 ESP32S3的I2C引脚简单介绍 (1)如果玩过多款MCU会发现,一般来说,一款MCU只有指定的引脚支持硬件I2C的。所以,根据惯性思维,我认为要使用ESP32的硬件I2C,就需要先看看datasheet,看看这块芯片的哪些引脚支持硬件I2C。注:看datash...

前言 (1)此系列文章是跟着汪辰老师的RISC-V课程所记录的学习笔记。(2)该课程相关代码gitee链接; start.S (1)qemu模拟的板子有8个内核,为了让我们跟方便理解,汪辰老师只使用了一个内核。(2)如下是进行判断,当前执行任务的是否是第一个内核。如果是的,往下执行,如果不是第一个内核,跳转到park任务中。 csrr t0,mhartid readcurrenthartid mv tp,t0 keepCPU'shartidinitstpforlaterusage. bnez t0,park ifwe'renotonthehart0 (3)这里的wfi是...

前言 (1)此系列文章是跟着汪辰老师的RISC-V课程所记录的学习笔记。(2)该课程相关代码gitee链接; 前置知识 RISC-V汇编指令编码格式 (1)在学习RISC-V的反汇编之前,我们需要先知道RISC-V的编码格式,RISC-V的编码格式有如下图6种。(2)现在我们以RV32I为例子说明。RV32I的指令长度为32位,因此我们每次读取指令的时候,都是4字节4字节的抽取出来。(3)RISC-V将一条指令分为了多个域(field),例如下面的R-type格式中32bit,有funct7,rs2,rs1,funct3,rd,opcode6个域(field)。每个域(field)都有...

前言 (1)最近要玩Milk-VDuo,配置环境过程中,发现磁盘小了。于是退出虚拟机,扩大Ubuntu大小,重新开机,发现无法进入Ubuntu界面。(2)查了很久,后面发现是磁盘满了之后,就会出现无法加载界面的情况,因此会黑屏。 处理办法 (1)启动虚拟机(2)在虚拟机开启界面,按下ESC,进入配置模式(3)选择第二个AdvancedoptionsforUbuntu,回车 (4)继续选择第二个Ubuntu,withLinux4.15.0-144-generic(recoverymode),回车 (5)等待配置,可能会出现一些小的报错,无需理会,直到出现如下界面: ...

前言 (1)今天看到一个有意思的问题,在交流群中,一位网友问,全局变量为什么不能给变量。会出现initializerelementisnotconstant报错,代码如下 include<stdio.h> inta=1; intb=a+1;//这里会报错initializerelementisnotconstant intmain(void) { printf("a=%d\r\n",a); printf("b=%d\r\n",b); return0; } (2)一般来说,全局变量我们都是默认给的一个常量数字,局部变量赋值给一个变量。关于上述问题,我也表示疑惑,...

前言 (1)今天看到一个有意思的问题,如何判断一个数字是否为2的若干次幂。这个问题并不难,但是对于我们的C语言功底还是有一点点的考验的。(2)希望各位可以先自行思考,实在想不出来再看后面的讲解。提示,C语言的位运算是一个好东西。 解析 2的若干次幂数所存在的特征点 (1)首先,我们需要知道2的若干次幂所存在的特征点。当我们知道了这个特征点之后,就可以将这个特征点与其他数进行分离了。(2)我们都知道,计算机是2进制系统。如果让一个数字乘以2,我们是不是可理解为,让这个二进制数右移动一位呢? (3)既然我们知道了,在计算机中乘以2就是进行一次右移操作。那么2的n次幂,是不是就是二进制...

官方教程:串口通讯上;串口通讯下;OpenMV的Uart类函数介绍 目录 材料准备 官方示例代码解析 UART()函数介绍  usart.write()函数介绍  time.sleep_ms(x)函数介绍  自己写的代码加深理解 usart.any()介绍  uart.read()介绍 总结 材料准备 需要准备材料,四根杜邦线,一个USB转TTL模块(冤大头可以买官方串口调试模块),一根安卓数据线(注意:是数据线,不是充电线,有些充电线不能进行数据传输)。 上面是我买的Usb转TLL模块,VCC接VIN,GND接GND,TXD接P5,RXD接P4。...

前言 (1)我们常常说定时器,串口是外设,但是很多人肯定有疑惑。定时器,串口不明明是存储在芯片里面的吗?(2)为了弄明白这个,就需要追溯到上个世纪了。 上个世纪的CPU与串口,定时器的关系 (1)在上个世纪,集成技术还不够发达,当时arm公司将CPU集成成一块芯片就很不容易了。(2)所以说,在上个世纪的时候,CPU就是一块芯片。而串口,定时器这种功能,也是一块块芯片,就如下图一样。(注意,下面这个只是做例子,并不是上个世纪的那种)(3)所以说,在上个世纪,arm公司目标就是做一块cpu芯片。而ST,TI这种现在的芯片厂家,就是利用arm公司所产出的cpu芯片,在加上串口芯片,定时器芯片,...

  rWLfpslpeeJP   2023年11月02日   31   0   0 开发板串口寄存器
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~