基于STM32CubeMX生成的基础工程手动移植FreeRTOS
今天成功手动移植了,于是想记录一下。手动移植的意义在于大概理解FreeRTOS的工程组织和配置,学习Cmake语法,以及遇到一些头疼的问题(来锻炼自己),非要说一个学习以外的意义的话就是可以使用最新版的FreeRTOS吧……实际生产使用时可以用CubeMX生成,即使不想用cmsis的通用接口,用freertos的原生API也是完全没有问题的,也不用担心配置不正确带来的隐患。 移植的FreeRTOS版本是FreeRTOSv202604.01-LTS即v11.3.1使用STM32F401CDU6宿主机采用ArchLinux编译工具链使用GNU 开源工具链,编译器为GCC调试器为daplink...
嵌入式Linux基础学习笔记
Chap4 Linux内核这一章主要讲了Linux内核源码的结构。首先下载,可以从www.kernel.org下载内核的源码。然后在源码顶层目录,可使用make 配合一些构建目标来完成配置。如make help获取帮助,make gconfig来进行图形化配置。配置的内容会写入顶层的.config文件中。另外,每个子目录下都有Kconfig文件,这个相当于是给make gconfig等等配置提供配置的选项的文件。 make 编译的最终产物是vmlinux,一个ELF格式的二进制镜像。但是这个文件很大,包含了很多调试信息,所以一般到机器里真正运行的不是这个,而是使用这个vmlinux压缩后...
安路FD软件通过 DAP Link OpenPCD 调试DR1M90
使用淘宝随便买的调试器是不支持TD的调试的。它只能用来烧录FPGA。FD本质上是在调试ARM,而且使用了openOCD。原厂的方案是基于FTDI的,然后原厂的.cfg文件也是这个(位于/home/mingzai/Programs/FutureDynasty/toolchain/openocd/fpsoc/share/openocd/scripts/target/anlogic/dr1m90.cfg). 那么就真的只能用原厂的调试器才可以吗?并不是,因为它使用O...
Verilog 插件与工具
VS Code 插件slang-server: Verilog/SystemVerilog LSP—Hudson River Trading一个Verilog的语言服务器(当然主要支持的是SV)。功能很强大,语法检查、跳转、鼠标悬停、一键重命名等应有尽有,甚至还有非常好用的一键例化,.v文件也终于有图标了。安装插件后会提示你下载slang-server,按照提示一键下载即可。美中不足的是这个slang-server主要是为SV设计的,对verilog的一些语法检查也是基于SV的,比如在.v文件中也会检查出“logic”这种类型(就是reg)。不过这一点无伤大雅;另外一点较为遗憾...
CS4272驯服失败 2026.8.10
简介CS4272是一款音频codec芯片(编解码器),即集ADC与DAC于一体的芯片,而且通常是多通道的,如CS4272就是2进2出。对于输入这一路,模拟信号(音频)被ADC采集后进入CS4272,内部有简单的数字处理,再通过I2S输出数字信号;而输出为处理器(如DSP、MCU)输出I2S数字信号给CS4272,再通过DAC转换成模拟信号输出给后级如音响。而它的控制接口是IIC或3线SPI(只能写不能读。可以发现这类codec芯片几乎都是只写的),通过控制接口可以配置CS4272的寄存器以修改它的数字处理的参数等等。 我想做一个音频效果处理器,选择了CS4272作为我的ADC与DAC。选...
贵州云南旅游
7月26日11:35~22:11 🚄兰州➡️贵阳,入住酒店住一晚7月27日9:46~10:27 🚄贵阳➡️安顺14:00~17:00 游玩黄果树瀑布陡坡塘瀑布、大瀑布+水帘洞,时间不够需要舍弃天星桥 20:00 返回安顺市区住一晚可逛安顺夜市等 7月28日11:12~15:39 🚄安顺➡️大理下午可逛大理古城 晚上住大理住一晚酒店建议住大理古城南门附近 7月29日整天 游玩洱海,晚上住大理再住一晚可以租车游玩洱海:大理古城 → 喜洲古镇,喜洲 → 双廊古镇,双廊 → 鹿卧山 → 小普陀,小普陀 → 理想邦 → 兴盛大桥 → 返回古城。 7月30日9:00~12:00 🚄大理➡️昆...
Neovim 与 lazy.nvim 理解笔记
Neovim 与 lazy.nvim 理解笔记 从零理解 Neovim 的启动流程、插件管理机制和 lazy.nvim 的工作原理 目录 1. Neovim 启动全流程 2. Lua 的 require 机制 [3. require().setup() 到底是什么](#3-require setup-到底是什么) 4. lazy.nvim 的 Plugin Spec 详解 5. lazy.nvim 作为”引擎”的工作方式 6. 插件 README → Spec 翻译方法 7. lazy-lock.json 与插件同步 8. 为什么用 Lua 而不是 JSON 9. LazyVim v...
reg != 寄存器
综合工具是否生成寄存器(触发器)的唯一标准,只是always块里的敏感列表里有没有posedge clk。而如果写了always @(*),里面的reg会被综合成纯组合逻辑即与门或门MUX。wire只是代表导线的概念,reg也只是代表变量容器的概念。
Testbench事件激励
你对语法的疑问很典型,很多人一开始都把 @ 和 always 绑在一起理解。其实 @ 是一个独立的时序控制,可以用在任何过程块(initial、always)里,也可以单独成句。我们把它拆开看就清楚了。 1. @ 到底是什么意思?在 Verilog 里,@ 是一个事件控制符,它会挂起当前进程,直到指定的事件发生,然后才继续往下执行。 1@(posedge clk); // 挂起,直到 clk 从 0 变 1 的那个瞬间,然后继续执行下一条语句 它就像一句“等一会儿”: 执行到这条语句时,仿真时间停止流动(进程挂起); 当 clk 的上升沿到来,进程被唤醒,时间继续; ...
