Linux 内核同步
摘要:
为什么要内核同步 防止共享资源的并发访问导致数据不一致 并发执行的来源 中断 进程切换 多处理器 内核同步的方法 主要就是 信号量 和 自选锁 两种加锁方式 原子操作 内核中定义了原子量类型atomic_t, 可以通过下面的函数来操作原子量 原子数操作 说明 ATOMIC_INIT(int) 初始化
Linux 字符驱动架构
摘要:
如何往内核里添加一个字符驱动程序 分配设备号 前置: * 设备号分为主设备号和次设备号. * 主设备号是分配给设备驱动程序的唯一标识符,用于标识设备所属的驱动程序。它告诉内核在访问设备时应该调用哪个驱动程序来处理请求. * 次设备号是与主设备号配合使用的较小标识符,用于区分同一主设备号下的不同设备实
Linux 模块
摘要:
什么是 Linux 模块 Linux模块,也就是可加载内核模块(LKMs),允许在运行时动态加载到内核中。 这说明两点: 是内核模块, 也就是说是内核的一部分, 只能依赖内核的接口, 且必须遵循内核的规则. 运行时可加载, 这避免了重复编译内核和重启系统. 并且内核和模块是分开的, 部署更灵活. 同
qemu 嵌入式linux 开发环境搭建
摘要:
主要记录大致步骤. qemu 安装 https://www.qemu.org/download/ wget https://download.qemu.org/qemu-9.2.1.tar.xz tar --xz --get --file qemu-9.2.1.tar.xz cd qemu-9.2.
bink LED
摘要:
FPGA 学习笔记1 本系列文章用于记录FPGA学习过程, 类似流水账,不做总结提炼. blink LED 设计 模块化设计, 这里分为 分频器, led控制器, 复位信号产生器. 实现 分屏器 module Clk_div #( parameter DIV = 5000 )( input i_cl
++ 新认识
摘要:
学c语言时对 x++ 或 ++x 的理解是 "先取值再+1, 先+1再取值" 今天在理解代码上遇见了问题 list.erase(it++); 对上面代码我理解等效于 list.erase(it); it++; 然而实际上这个代码运行不起来, 因为erase的时候it会被设置未空,再执行it++就会c
UT 结构分析笔记
摘要:
本文仅记录当时的思考,并没有完整详细的解决方案 上下文 在写UT的时候我遇见下面这种情况 //success EXPECT_CALL(mock,func1()).Willonce(Return(yes); EXPECT_CALL(mock,func2()).Willonce(Return(yes);
CPP_NOTE
摘要:
enum class foo{min,mid,max};//必须使用枚举名使用符号:foo::min。且不能隐式转换类型。 enum class:short foo{};可以指定枚举的底层类型是short。 Stack a = stack();//这种方式是先声明一个匿名对象然后通过拷贝构造函数复制
git
摘要:
Git reflog 可以查询每次操作前的的快照配合使用 git reset --hard banbenhao 可以撤回之前的误操作 Git checkout -- 文件名 撤销未add的修改 Git reset HEAD 文件名 撤销add Git rest --hard HEAD^ 回退到上一个
gmock,gtest
摘要:
MATCHER_P(StableRrsCapDataExpectedValue, expected, "") //定义一个接受一个参数的匹配器 StableRrsCapDataExpectedValue(expected) MATCHER_P2 定义一个接受两个参数的匹配器 、、多说两句,匹配器通常