国际哥的独立博客

「你要明白,自由思考比畅所欲言更重要。」

翻转 IO,通信卡死?

STM32 GPIO 异常调试记录

共享资源互斥访问,临界区和锁,每个软件工程师大概都能说上几嘴,我自认为也略知一二,可真当问题出现,情况又会是怎样? 事件经过 项目中使用 STM32 进行 RS485 通信,2 线方式,半双工通信,通过 UASRT 外设驱动接收发器芯片,需要控制收发切换管脚,同时,闪烁 LED 作为工作指示。 诡异的事情在于,当程序快速翻转 LED GPIO 时,总线通信便会卡住,并在一定时间内随机出...

搭建码云 CI 和 CLA 签署服务(二)

Jenkins 安装配置与部署

本系列文章将介绍如何在码云搭建 CI 构建和 CLA 签署服务,共分为三篇: 搭建码云 CI 和 CLA 签署服务(一)- 开源项目自动化构建与协议签署 搭建码云 CI 和 CLA 签署服务(二)- Jenkins 安装配置与部署 搭建码云 CI 和 CLA 签署服务(三)- CLA 签署检查服务搭建 本文为第二篇,详细记录 Jenkins 安装配置的步骤及注意事项。 一、Jenk...

搭建码云 CI 和 CLA 签署服务(一)

开源项目自动化构建与协议签署

和编码不同,在生产力工具上付出努力当然是值得的。 这几周基于 Jenkins 及 openEuler/ci-bot 搭建了 RT-Thread 码云 CI 和 CLA 服务,为 RT-Thread 社区接受 bsp 代码贡献做准备。由于这方面现有的资料有限,没太多前人经验参考,摸爬滚打后决定写下点什么。 概述 & 文章目录 开源项目接触久了,CI 和 CLA 最终是绕不开的。G...

深入理解 STM32 双堆栈机制

关于堆栈你该知道的知识

堆栈堆栈,「堆」和「栈」 经过无数技术书籍,以及各类技术博主苦口婆心的提醒,恐怕没几个人会再把堆和栈混为一谈,精明的开发者都明白,堆栈堆栈,「堆」和「栈」是不同的两种数据结构,具有各自的内存分配和使用方式。 众所周知,栈由编译器自动分配释放,堆由程序员手动分配释放,栈存放函数形参、局部变量,堆内存申请了记得释放……诸如此类,老生常谈。众所不周知,在不同的体系结构、裸机/操作系统下,堆栈在...

条条大路通罗马,个个 Socket 通网卡

RT-Thread 网络框架及相关组件学习笔记

写这篇文章的缘由是升级项目中 LwIP 版本引发的一些感受和理解 ,因此思考角度会从协议栈出发向上向下延伸代入,偏向框架整体与部分的关联,要提的一点是,既然是个人理解,加上本人能力知识有限,难免会存在不严谨甚至错误的地方,请读者批判看待并欢迎指正。 网络系统分层思想 得益于 uIP、LwIP 等轻量级网络协议栈的广泛使用,嵌入式设备在拥有完整 TCP/IP 功能的同时,又保证了对处理器资...

硬核音频系列(一)—— 声音信息的表示

基础概念扫盲,PCM 编码方式

关于「硬核音频系列」 千万别被标题所迷惑,这个系列讲的可不是什么高深莫测的理论,或者奇淫巧技骚操作,而是个人在接触数字音频知识以来的切身体会,以及少量代码实践后的学习笔记。在参与公司项目的过程中,先后了解了 PCM 编码、压缩编解码、淡入淡出等知识,因此本系列文章也将按照这个顺序组织,内容偏向入门小白级别,同时结合嵌入式系统的特点,分为三篇记录总结我的音频学习之路: 硬核音频系列(...

硬核音频系列(二)—— 音频文件编解码格式 ADPCM

动手实现 adpcm 解码器

硬核音频系列文章列表: 硬核音频系列(一)—— 声音信息的表示:基础概念扫盲,PCM 编码方式 硬核音频系列(二)—— 音频文件编解码格式:动手实现 adpcm 解码器 硬核音频系列(三)—— 线性淡入淡出:算法思路、实现与优化方法描述 在系列第二篇,会介绍一些关于音频数据存储、处理的内容,并回答上一篇末尾提出的两个问题:如何减小 PCM 格式数据的体积和管理这些数据。 ...

硬核音频系列(三)—— 线性淡入淡出

算法思路、实现与优化方法描述

硬核音频系列文章列表: 硬核音频系列(一)—— 声音信息的表示:基础概念扫盲,PCM 编码方式 硬核音频系列(二)—— 音频文件编解码格式:动手实现 adpcm 解码器 硬核音频系列(三)—— 线性淡入淡出:算法思路、实现与优化方法描述 硬核音频系列第三篇,聊聊淡入淡出怎么搞。 音频淡入淡出概述 淡入淡出(fade in & fade out)可以实现音频音量...

STM32 Nucleo-64 开发板连接 RW007 WiFi 模块

助力万物互联,RW007 上手体验

一、简介 本文使用 STM32 Nucleo 开发板连接 RW007 WiFi 模块,通过运行 RT-Thread 操作系统,让开发板轻松愉快联网。 STM32F401 Nucleo-64 STM32 Nucleo-64 是 ST 官方推出的开发板,依据搭载的 STM32 芯片型号不同(皆为 LQFP64 封装),分为众多版本,本文所使用的是带 STM32F401RE 芯片的板子 ——...

select() 学习笔记

初步认知、例程及原理简析

初步认知 select() 能实现非阻塞数据读写,避免阻塞线程以及维护多线程带来的额外消耗。 select() 是一个系统调用(system call),由具体操作系统实现,不难理解,因为其行为涉及到 IO、文件系统等操作,而这些服务都是操作系统提供的。 select() 函数监视多个 fd(file descrīptor 文件描述符)的状态变化,这些 fd 可分为三大类:r...