- 博客(47)
- 收藏
- 关注
原创 rtos最小任务切换的实现 keil软件仿真 stm32 PendSV
本例子实现了一个 rtos 最小的任务切换功能,使用 keil 仿真功能,在模拟的 stm32f103 的器件上实现了使用 PendSV 中断切换线程的效果。
2024-05-30 17:29:02
1133
原创 spsr 的恢复出错,导致 thumb 指令集的 it 条件运行指令运行异常,清晰的调试思路帮助快速解决问题
分析问题,缩小问题范围敏锐观察,抓住灵感验证寄存器的值是否正确不能读中间状态,必须紧贴使用之前进行验证相信硬件,在计算机的世界没有上帝。
2024-05-11 16:08:22
864
1
原创 PTP 对时协议 IEEE1588 网络对时 计算原理
本文将阐述 PTP 对时协议的原理,slave 节点如何根据获取的时间来纠正和更新自己的时间。整个通讯过程中会发送 4 种类型的数据包,用来支撑对时。下面是 4 个包的解释Sync message: 由 master 发送,发起对时事务, slave 接收到之后,会记录时刻 t2.Follow_Up message: 由 master 发送,在数据内容中携带 master 发送 Sync message 时的精确时刻 t1.
2024-05-10 15:20:53
1503
原创 PTP 对时协议 IEEE1588 网络对时 硬件基础
在很多应用场景有精确对时的需求,例如车载网络,音视频流,工业网络。本文档将会阐述对时的硬件需求。至此,由网卡硬件实现的硬件精确时间对时的基础已经分析完毕。主要精髓是网卡会自动保存发送和接收的时间到描述符里,这个时刻及其精确,不受代码运行抖动的影响。
2024-05-09 15:47:29
2086
原创 arm 交叉编译 thumb 与 arm 指令的方法
mthumb-interwork 支持 arm 与 thumb 混合。-mthumb 使用 thumb 指令集。最后将 a.out 放入目标板卡使用。-static 使用静态链接的方式。指定函数编译为 thumb 指令。ubuntu 中安装方法。添加执行权限,即可运行。
2024-05-04 10:51:02
735
原创 解释PCIe MSI 中断要求中断向量连续?PCIe 规范里并没有明确指出
MSI 物理条件,MSI 中断产生的逻辑是RC初始化的时候,由软件将配置写入到 EP 的 2 个寄存器中,这两个寄存器一个指示的是地址 Message Address,一个指示的是数据 Message Data。当 EP 试图触发中断的时候,将会发起一个 MW 事务,往对应的 Message Address 写入 Message Data 的值。
2023-11-24 17:32:11
1056
原创 mkimage 打包启动镜像 使用方法 bootm 加载校验
应用场景是从 uboot 拉起某个 rtos。由于需要同时用 TFTP 加载几个文件才能正常启动运行,这样的加载方式释放给客户容易出错,本地开发也比较麻烦,因为每次编译生成的文件都有改动,需要重新加载。
2023-11-24 14:30:02
459
原创 PCIe 的 MSI-X 中断,申请过程全流程分析,详细讲解 EP 空间中断能力 CAP 的串联
主要分析 Table BIR,这个寄存器是控制将 MSI-X Table Structure 存放在 BAR 内存空间的位置的。Table BIR 有 3Bit,指示 MSI-X Table Structure 将映射到 BARn 空间的某一个,Table Offset 指示BARn基地址的偏移。然后在 CPU 的对应 RAM 空间来初始化如下结构,即完成了 MSI-X 的结构初始化。规定 EP 的配置空间 0x34 的地址存放了第一个 CAP 的地址偏移,后续的 CAP 都如此串成链。
2023-11-15 17:35:34
2768
3
原创 PCIe 的 MSI 中断详解,寄存器级别的详细流程分析,完全搞懂硬件的工作流程
EP 可以正确触发 MSI 中断,并被 RC 捕获后往 GIC 投递 PCIe 中断。本例的 MSI 中断并不是直接写 GIC 的 ITS ((Interrupt Translation Service)在GICv3中是可选的。ITS负责接收来自外设的中断,并将它们转化为LPI INTID发送到相应的Redistributor) 产生的,而是由 RC 中转了然后投递到 GIC 的。
2023-11-01 11:17:45
7176
2
原创 PCIe 访问 EP 配置空间,空间映射详解,BDF 计算偏移
两种 MEM 访问 EP 配置空间的方式都是通过基地址 + 偏移地址访问的。类 xilinx 的方式是全映射,需要 256M 的空间,将所有的 PCIe 设备的配置空间都映射到 CPU 的地址空间来。类 designware 则取巧,使用少量的 CPU 地址空间,但是每次访问之前需要重新映射 EP 的地址,使得相同的 CPU 地址空间可以放到的不同的 EP 设备的配置空间。
2023-10-31 16:21:21
1709
1
原创 一文彻底理解大小端和位域 BIGENDIAN LITTLEENDIAN
高位0x12345678低位大端模式低地址高地址小端模式低地址高地址小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。简单的说就是低地址存低位,高地址存高位。大端模式是正好相反。
2023-02-19 20:16:32
806
原创 C与CPP混合工程函数方法互相调用的实现
return 0;return 0;c_print();return 0;编译之后生成的文件用nm命令查看它的符号表可以看到:使用extern "C"包含的函数生成的符号表没有额外增加前后缀,这样在 c 代码中只需要显式地声明这个函数即可。
2023-02-19 13:49:14
5821
原创 M300在 SylixOS 系统下网络性能测试 MIPS 架构
基于SylixOS的某型板卡, 双网口转发测试. 本文描述了双网口在路由模式和桥接模式下的延迟和带宽. 两种模式的性能基本相同
2022-11-29 08:34:21
309
原创 zynq7000 从github拉取linux源码进行编译,运行. 快速进行外设验证。全流程教程
zynq linux 快速编译验证 使用SylixOS进行驱动开发, 需要快速验证板上的外设是否完好. 嫌弃官方的SDK占用磁盘空间巨大, 本教程直接使用 github 上的源码进行快速编译运行.
2022-11-28 13:55:04
674
转载 Ubuntu 连接 wifi 断开之后的脚本监控重连
我是Ubuntu GNOME用户,我想知道是否有一种方法能够断开连接时自动重新连接。从18.10开始,NetworkManager中的xxx连接具有设置xxx.persistent,该设置可以做到这一点:在连接断开时重新连接,直到您手动断开连接。默认情况下,它设置为"no",但不幸的是,它既不在Gnome网络设置中也不在nm-connection-editor中公开。但是您可以通过如下CLI进行设置:当然,连接必须先存在所以,第一步,在设置中创建xxx链接,记下名字。
2022-11-20 17:00:05
828
原创 一次 MDIO 配置 switch 的调试过程,88e1512 switch mv88e6xxx
# 一次 MDIO 配置 switch 的调试过程## 1、什么是 MDIO 1. 物理层时序 总线的电平协议类似 IIC 的协议。有两线通讯,一条时钟 MDC,一条数据 MDIO。但是数据的表示和 IIC 有些许差异。 2. 使用场景 用于读写每个PHY的控制寄存器和状态寄存器,以达到控制PHY行为和监控PHY状态的目的。这是一个总线,可以挂32个不同地址的器件,通过不同的地址和对应的器件进行通讯。 3. 使用方法
2022-09-14 20:20:50
3655
1
原创 吐血分享 HID 2个接口设备的描述符代码
本代码实现了一个 USB device 使用两个接口描述符成功枚举,并使用 2 对端点和 PC 通讯。PC 上的上位机可以正常识别两个接口设备。使用 0x01 0x81 和 0x02 0x82 端点通讯
2022-07-13 21:41:24
785
原创 USB-HID 设备扫盲
这是一篇关于USB协议的分析,重点分析HID(human interface device)类设备。本文档是在开发 CH567 HID 设备之后成文。USB速度有4种,分为低速(Low-Speed)、全速(Full-Speed)、高速(Hi-Speed)和超高速(SuperSpeed)。其中的总线速度依次大约是1.5Mb/s, 12Mb/s和480Mb/s。这并不是指实际的数据传输速率。USB的HOST,其D+与D-会有15K的电阻下拉,在没有设备的时候会是低电平。低速设备D-有1.5k电阻上拉。全速设备D
2022-07-13 21:08:44
4180
原创 windows下使用命令行编译 SylixOS 的基础bsp工程
由于之前习惯使用vscode作为主力编辑器,在RealEvo-IDE上做编辑代码的工作不太顺手。这样导致每次代码需要编译时,就要切换会IDE去点击build按钮进行编译。这个操作虽然不复杂,但是肯定不适合我这个懒惰的人,我就喜欢偷懒,折腾。...
2022-07-02 17:34:38
462
1
原创 designware PCIE IP核的驱动 调试及记录
designware PCIE1. PCIE RC 驱动流程开启时钟,初始化PCIE PHY 的状态,打开训练状态,若是训练完成,和EP建立了链接, (在PCIe链路可以正常工作之前,需要对PCIe链路进行链路训练,在这个过程中,就会用LTSSM(Link Training and Status State Machine))LTSSM将会进入L0状态。接下来可以对EP的配置空间进行访问(前置知识,你需要了解PCIE的配置空间,mem空间,io空间),以深度优先的方式开始进行不同的设备的枚举。(不同
2022-05-22 15:49:00
3001
1
原创 designware 网卡问题解决 iperf ping 回环模式
记一次 designware 网卡网络故障问题的解决过程问题现象在给客户ddr3板卡适配SylixOS时,会出现ftp连接困难,telnet连接不正常,板卡作为iperf服务器测试正常,作为iperf客户端测试无法连接。问题测试分析ddr3板卡问题可以稳定复现,在多个板卡上现象相同。同样代码在ddr4的板卡可以正常运行。ddr3板卡跑原厂的Linux测试,网络状态良好。初步可以判断是SylixOS系统上对网络的配置有某些不正确的地方写c代码对板卡进行udp测试,tcp客户端和tcp服
2022-05-13 12:03:30
778
原创 使用Python获取键盘的输入
使用Python获取键盘的输入本文描述在 Ubuntu 20 上使用 python 获取键盘输入1. 准备安装 evdev确认目标键盘的输入具体的设备号使用 lsusb 查看键盘usb设备总线号和设备号使用 cat /proc/bus/input/devices 和上面对应 ID使用 cat /dev/input/event4 | hexdump 去测试可疑的输入设备2. 使用如下 python 程序即可改程序会将读到的键盘输入封装成 8Bytes 的 HID 键盘数据包,
2022-05-04 16:45:31
7142
原创 esp32-c3 蓝牙 BLE 键盘 串口 低延时 ESP-IDF开发环境
esp32-c3 主控作为 BLE keyboard 的使用介绍本文默认你已经了解了ESP-IDF开发环境的基本操作,本文只描述思路,不讲操作细节本文实现了使用esp32c3将来自串口的键码使用BLE蓝牙发送到Win电脑的功能。在windows下进行了测试,使用PC自带的蓝牙和esp32c3配对之后,PC可以收到来自其键盘输入1 准备材料esp32c3: 这里使用的是合宙的开发板,淘宝9.9包邮,便宜好用。开发环境:ESP-IDF v4.4.1-dirty其他:我这里使用的是Ubuntu读
2022-05-04 16:13:15
6408
1
原创 SylixOS 非0核强亲和性绑定
演示将1核设置为强亲和性运行将当前线程绑定到1核运行 LW_CLASS_CPUSET cpuset; LW_CPU_ZERO(&cpuset); LW_CPU_SET(1, &cpuset); iRet = API_ThreadSetAffinity(API_ThreadIdSelf(), sizeof(cpuset), &cpuset);配置1核只运行亲和线程 if (API_CpuGetSchedAffi
2022-04-07 10:19:04
387
原创 SylixOS 给网卡添加多IP的方法
SylixOS 网卡添加第二个IP的方法使用 ifmip 命令添加 ip,帮助信息如下实际指令操作如下ifmip en2 add 172.168.0.126 255.255.255.0实际效果如下实际作用是在 en2 网卡增加了新的 ip 172.168.0.126,这样可以直接与对应网段的主机通信。ping命令演示...
2022-04-07 10:07:24
320
原创 vscode 完美配置函数自动补全 SylixOS 代码定义完美跳转 优雅地写代码 c cpp intelliSenseEngine
vscode c语言 API函数跳转 自动补全 c_cpp本文章主要内容: 在 windows 下使用 vscode 优雅地开发 SylixOS. 实现API函数自动补全, 函数定义跳转等功能. 可举一反三, 其他 c 语言开发也可同样配置.1. 安装插件安装 vscode 过程不表在 vscode 安装 c 语言扩展插件2. 进行 vscode 配置打开 settings.json 进行配置快捷键 Ctrl + Shift + p 打开命令栏, 输入 settings.json,
2021-11-04 12:39:11
2280
原创 spi 相位 极性
每次开始传输时,主器件先拉低从器件的片选信号线NSS,选中要传输的从器件。SCK时钟线发送一个时钟周期就传输一位数据。MOSI为主出从入,数据由主器件控制发送,从器件接收。MISO的数据由从器件控制发送,主器件接收。所以SPI传输一个字节就相当于主器件和从器件交换一个字节。 SPI只有主模式和从模式之分,没有读和写的说法,因为实质上每次SPI是主从设备在交换数据。也就是说,你发一个数据必然会收到...
2018-08-21 13:45:01
2667
转载 浅谈信号量
信号量的数据类型为结构sem_t,它本质上是一个长整型的数。函数sem_init()用来初始化一个信号量。它的原型为: extern int sem_init __P ((sem_t *__sem, int __pshared, unsigned int __value)); sem为指向信号量结构的一个指针; pshared不为0时此信号量在进程间共享,否则只能为当前进程的所有线程共享;
2017-05-26 12:01:38
254
原创 ftp站点下载
本篇博文记载ftp下载的操作方法操作系统:centos 6.7 首先 确定是否安装了ftp服务,否则应该:yum install ftp示例:下面我将示例从某个站点下载文件 ftp://ftp.openssl.org/source/openssl-1.0.0t.tar.gz自此就完成了简单的下载任务。下面贴出一些常规的命令操作FTP> ! 从 ftp 子系统退出到shell。 FTP> ?
2017-05-23 09:22:06
1322
原创 Linux I2C read eeprom 从应用层看系统
Linux 操作I2C从设备有两种不同的方法。本篇文章将会介绍通过系统总线来操作I2C设备的流程。在应用层操作I2C,使用ioctl来传参。ret = ioctl(fd, I2C_RDWR, (unsigned long)&erom_data); 这是设备接口控制函数ioctl,fd是打开设备节点的文件描述符fd = open("/dev/i2c-0",O_RDWR); I2C_RDWR
2017-05-14 09:20:40
714
原创 关于根文件系统 jffs2和ubifs
关于根文件系统jffs2 ubifs uboot环境变量我只详细了解了两个重要的文件系统,其他系统以后在详细了解。 jffs2 使用起来比较方便,但是不适合大的文件系统。当分区比较大或者分区将要满时,挂载会花费大量时间。 ubifs 使用起来稍显复杂,做为根文件系统,我做了很久但是现阶段并没有完成。使用起来优点很多,快速挂载性,对flash 的尺寸具有良好的扩展性,等等很多优点。
2017-04-23 15:54:51
2319
原创 uboot 简单的执行流程之我见
u-boot做了些什么: 通俗来说就是设置函数开始存放的位置 根据链接程序确定了程序主入口接下来的文本段的排列顺序(这将是启动 最重要的部分)最先执
2017-04-17 14:52:18
410
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人