从物理定律到编程语言
文章平均质量分 88
漫谈从晶体管到高级程序设计语言的层层趣事
断水客
未来将在实时嵌入式系统领域深耕,b站:太白断水客
展开
-
【调教树莓派】如何获取树莓派的硬件ROOT(JTAG裸片调试)
重获裸片调试的能力,完全占有硬件(可恶的占有欲)原创 2024-10-19 18:59:26 · 646 阅读 · 0 评论 -
【图文并茂】【软件无线电】如何用收音机接收图片,如何将图片编码到不同频点上,捕获在频谱上跳动的MIKU
如何将一张图片,编码放到不同的频点上,使得接收方能够通过SDR模块,捕获这样的信号原创 2024-10-09 11:14:23 · 1028 阅读 · 0 评论 -
ARMv8 AArch64异常处理机制概览
ARMv8的异常向量表也有固定的区域划分,不过更大原创 2024-08-26 22:59:44 · 1148 阅读 · 0 评论 -
如何写便于移植的驱动,以软件模拟 QSPI 为例
一个极为通用的软件抽象 4 线 spi 模拟驱动原创 2024-07-28 08:44:28 · 789 阅读 · 0 评论 -
怎么快速上手虚拟化(容器)技术——以 Docker 为例
所谓容器,实际上是一种虚拟化技术,用于为应用提供虚拟化的运行环境,相较于虚拟机具有轻量级、低延迟的特性。原创 2024-03-31 21:22:07 · 1057 阅读 · 0 评论 -
C/C++语言学习路线: 嵌入式开发、底层软件、操作系统方向(持续更新)
只学想玩的,只玩需要的,只需要学了好玩原创 2024-03-28 23:16:51 · 2853 阅读 · 6 评论 -
文件系统I/O FATFS RW 源码分析
FATFS 实现源码结构剖析和二进制解析示例原创 2024-03-17 13:34:44 · 1087 阅读 · 0 评论 -
关于参数处理那点事,C标准库反汇编解析
访问无名参数(既没有命名也没有类型)的类型和宏原创 2024-02-22 20:33:10 · 979 阅读 · 0 评论 -
DTMF SIGNAL,双音多频信号解析小记
远程启动故乡的冷盘备份原创 2024-01-21 15:48:36 · 1727 阅读 · 1 评论 -
如何一个例子玩明白GIT
一次性搞定GIT的使用方法学习原创 2023-12-10 13:07:10 · 626 阅读 · 0 评论 -
瞥一眼 FAT32,手撸文件系统
FAT(File Allocation Table),最早在DOS v1.0 中被引入,是一种极简的文件系统,占用空间,是目前最常见的文件系统之一。原创 2023-12-02 14:52:38 · 1081 阅读 · 0 评论 -
一文读懂ARM安全性架构和可信系统构建要素
TrustZone 技术是为了防护 software 和 simple hardware 攻击而设计的原创 2023-11-05 14:06:45 · 919 阅读 · 0 评论 -
嵌入式开发中的抽象、封装与继承
# 1 何从实现?OOP 是 CPP 的显著特征,尽管它是一种多重范式的语言第一部分谈的是产品的实现(implement)而非产品的设计,因为对于个人开发者而言,往往是知道如何实现产品,而后才着手做整体设计的。这并不是说实现高于设计,而是承认此类开发者的首要驱动力通常不是用户需求,而是尝试新事物的热情。对新事物的尝试是以一些原则为基础的。从一年级学习电路原理开始,基尔霍夫定律指导下的‘前后级独立’的分析原则就印刻在每个电子/控制/仪器专业的预备工程师心中。原创 2023-08-19 10:33:17 · 356 阅读 · 0 评论 -
如何剪裁操作系统源码——移植FreeRTOS的内存管理模块到ARMV8裸片
为缺乏标准库实现的处理器IP移植内存管理模块原创 2023-08-06 15:39:17 · 966 阅读 · 2 评论 -
如何为SoC做ARM CPU适配——以裸核使用malloc为例
guide for SoC software port原创 2023-07-15 12:56:33 · 2052 阅读 · 0 评论 -
Linux内核模块开发 第 10 章 系统调用
乍一看,我们似乎可以通过检查系统调用是否等于我们的open函数来解决这个特殊的问题,如果是,就完全不改变系统调用(这样B在被移除时就不会改变系统调用),但是这会导致一个更糟糕的问题。接下来,B被插入到内核中,用B_openat替换系统调用,完成后它将调用它认为是原始的系统调用A_openat。因此,如果我们想改变某个系统调用的工作方式,我们需要做的是编写我们自己的函数来实现它(通常是通过添加一些我们自己的代码,然后调用原来的函数),然后改变sys_call_table的指针指向我们的函数。原创 2023-07-14 23:40:52 · 280 阅读 · 0 评论 -
Linux内核模块开发 第 9 章 谈及设备文件
每个设备都有自己的 ioctl 函数,这些命令可以读取 ioctl 命令(将信息从进程发送到内核),写入 ioctl 命令(将信息返回到进程),两者兼而有之,或者两者都没有。设想我们通过串口连接一个 modem(即使这是一个内置的modem,从 CPU 的角度看,仍是通过串口连接的,所以这种设想并不费力)。如果你想在自己的内核模块中使用 ioctl,最好收到一个正式的 ioctl 分配,所以如果你不小心得到了别人的 ioctl,或者如果他们得到了你的,你就会知道出了问题。下面的例子中,我们使用。原创 2023-07-14 23:09:43 · 208 阅读 · 0 评论 -
Linux内核模块开发 第 8 章
Linux内核模块开发 第 8 章, 与模块交互原创 2023-07-06 22:57:04 · 155 阅读 · 0 评论 -
Linux内核模块开发 第 7 章
Linux内核模块开发 第 7 章 /proc 文件系统原创 2023-07-06 22:26:07 · 371 阅读 · 0 评论 -
毕业季回望——工科生到底学到了什么
基操勿6原创 2023-06-26 23:28:53 · 152 阅读 · 0 评论 -
Linux内核模块开发 第 6 章
Linux内核模块开发 字符设备驱动原创 2023-06-03 20:10:03 · 645 阅读 · 0 评论 -
Linux内核模块开发 第 5 章
Linux 内核模块开发预备知识原创 2023-06-03 20:05:56 · 613 阅读 · 0 评论 -
如何使用openMP的数据环境——private、firstprivate和default
如何使用openMP的数据环境原创 2023-05-21 19:21:04 · 1049 阅读 · 0 评论 -
高级嵌入式软件工程师养成计划
夫计先定而后动者,胜;动而后计者,败原创 2023-05-14 17:54:01 · 1468 阅读 · 0 评论 -
何谓SRIO——RapidIO之旅从这里开始
全球领先的低延迟、高带宽、可伸缩性和可靠性的互连标准原创 2023-04-23 23:00:15 · 22899 阅读 · 5 评论 -
什么是眼图?(扫盲向)
眼图是传输信号序列在时域上的叠加原创 2023-02-13 00:11:51 · 1688 阅读 · 0 评论 -
ARMv8高速缓存(Cache)和内存管理单元(MMU)
Cache弥补取速率差异。MMU控制Cache策略、内存属性、访问权限并提供虚拟地址映射功能。原创 2023-02-04 19:14:43 · 2375 阅读 · 0 评论 -
软件无线电之数字下变频(Matlab实例)
接收信号与本地振荡器产生的本振信号相乘,然后通过低通滤波器获得变频后的信号,这种技术手段则是下变频。原创 2023-01-29 23:03:11 · 6473 阅读 · 2 评论 -
ARMv8 AArch64异常处理机制概览
相对于ARMv7中的异常向量表(Exception Vector Table),ARMv8异常处理机制更为复杂,涉及处理器的异常等级(Exception Levels, ELn)、运行状态(Execution States)和安全模式(Secure Mode)。原创 2023-01-28 20:20:55 · 1905 阅读 · 0 评论 -
如何在网页画一个旋转的粉色圣诞树(含源代码)
html、js、css协同实战原创 2022-12-18 23:02:41 · 1521 阅读 · 0 评论 -
如何理解CRC循环冗余校验——图解CRC算法模型和C语言实现
CRC算法模型、实现、在线工具原创 2022-11-30 21:27:01 · 1344 阅读 · 0 评论 -
怎样编写裸片启动程序-ARMv8的Boot Code和ROM程序
裸片是如何Boot(启动)起来的?Flash里的程序是怎么被加载到RAM中的?原创 2022-11-05 00:28:29 · 3052 阅读 · 8 评论 -
bin和hex文件、axf和elf文件、烧写和FLASH操作代码上传
FLASH烧写相关的代码,可以用在需要烧写时再通过线上传的方式加载到嵌入式系统的片上存储器内原创 2022-10-09 22:20:45 · 803 阅读 · 0 评论 -
如何使用ARM协处理器CP15在32位ARRCH模式下操作64位寄存器)
ARMv8协处理器读写64为寄存器原创 2022-09-18 12:13:59 · 996 阅读 · 0 评论 -
【ARM】关于指令集架构?
什么是指令集?指令集为何重要?原创 2022-09-18 10:19:20 · 494 阅读 · 0 评论 -
【感性认识】嵌入式开发有何不同
关于软硬件结合设计和跨平台开发原创 2022-09-10 10:32:39 · 1432 阅读 · 0 评论 -
从编写操作系统的角度看上下文切换
结合系统任务切换树梳理上下文切换原创 2022-08-28 12:01:28 · 347 阅读 · 0 评论 -
在多核异构SoC平台上进行软件开发
分享多核异构平台的软件开发经验原创 2022-07-31 17:41:15 · 2623 阅读 · 0 评论 -
如何用C语言做离散傅里叶变化
1 离散傅里叶变换此图大家都再熟悉不过了,任何周期信号都可以看作是一系列不同频率正弦信号叠加的结果。信号从时域变换到频域的过程,可以借助傅里叶变换(Fourier transform)完成。我们知道连续信号的傅里叶变换是一个积分过程,而处理连续信号并不是计算机所擅长的,通常是处理离散的采样信号。物理信号的数字采样结果是含有N个点的点集,用x[n],(n=1,2,…N)表示。对点集x[n]做的傅里叶变换,即本文要介绍的离散傅里叶变化(DFT,Discrete Fourier Transform)。原创 2022-05-23 14:32:39 · 2457 阅读 · 0 评论 -
怎样快速上手实时操作系统(以RT Thread为例)
嵌入式操作系统狭义上的嵌入式系统硬件资源较为紧张,使得嵌入式软件的设计在很大程度受制于硬件条件,嵌入式操作系统也因之组成相对简单。随着嵌入式硬件的复杂度的上升,嵌入式操作系统的内容和功能也愈发地丰富。抛去应用层不谈,这里梳理一下嵌入式操作系统最底层的基本组件。基本组件初始化(Initialization)用于建立内部数据据结构和全局变量,完成硬件的初始化。内存管理(Memory Handling)建立系统和任务堆栈。任务堆栈用于操作系统上的任务的内存资源,可分为静态栈和动态栈。静态栈包含在操原创 2022-05-16 23:01:56 · 1555 阅读 · 0 评论