- 博客(24)
- 收藏
- 关注
原创 【读书笔记】深入理解计算机系统—第二章、信息的表示和处理
本文讨论了计算机系统中数字编码与信息存储的基本原理。重点介绍了无符号编码和补码编码的区别,以及整数运算与浮点运算在精确性和范围上的差异。文章阐述了虚拟内存的概念和实现方式,详细分析了大小端存储模式、指针特性、C语言数据类型及位运算规则。此外,还探讨了补码表示法的特性及其不对称范围问题,并强调了二进制代码的可移植性问题。这些底层概念对于理解计算机系统运行机制至关重要。
2025-10-29 21:11:54
370
原创 【读书笔记】深入理解计算机系统———第一章、计算机系统漫游
如果命令行的一个单词不是一个内置的shell命令,那么shell就会假设这是一个可执行文件得名字,它将加载并运行这个文件。(如 ./hello)
2025-10-25 10:45:13
649
原创 驱动程序基石-阻塞与非阻塞
使用poll时,可以设置超过时间为0,这样即使没有数据它也会立刻返回,这就是非阻塞方式。所谓阻塞,就是等某件事件发生。比如调用read读取按键时,如果没有按键数据则read函数不会返回,它会让线程休眠等待。APP调用open函数时,传入函数时,传入O_NONBLOCK就表示要使用非阻塞方式;对于字符设备文件,O_NONBLOCK起作用的前提是驱动程序针对O_NONBLOCK做了处理。使用poll时,如果传入的超时时间不为0,这种访问方法也是阻塞的。醒、查询等等各种方式,,驱动程序只提供这些能力,怎么用由。
2025-10-22 17:01:02
109
原创 驱动程序基石-异步通知
⑥⑦调用fasync_helper,它会根据FASYNC的值决定是否设置button_async->fa_file=驱动文件filp:驱动文件file结构体里面含有之前设置的PID。⑤设置Flag里面的FASYNC位为1:当FASYNC位发生变化时,会导致驱动程序的fasync被调用。②APP给SIGIO这个信号注册信号处理函数func,以后APP收到SIGIO信号时,这个。APP 收到信号后,它的信号处理函数被自动调用,可以在里面调用read 函数读取按键。⑤发给谁:APP,APP要把自己告诉驱动。
2025-10-22 16:36:18
196
原创 驱动程序基石-POLL机制
drv_poll要把线程挂入队列wq,但是并不是在drv_poll中进入休眠,而是在调用drv_poll之后休眠。⑥APP根据poll函数的返回值就可以知道是否有数据,如果有数据就会调用read得到函数。④当有数据时,比如当按下按键时,驱动程序的中断服务程序被调用,它会记录数据、唤醒APP。有数据时再去调用read函数。APP 不知道驱动程序中是否有数据,可以先调用 poll 函数查询一下,poll 函数可以传入。线程被唤醒的原因有2:中断发生了去队列wq中把它唤醒,超时时间到了内核把它唤醒。
2025-10-22 15:52:04
185
原创 驱动程序基石-休眠与唤醒
当 APP1 再次运行时,就会继续执行 drv_read 中剩下的代码,把数据复制回用户空间,返回用户空间。在中断的处理过程中,也就是 gpio_key_irq 的执行过程中,它不能休眠:“中断”怎么能休眠?当按下按键,驱动程序中的中断服务程序被调用,它会记录数据,并唤醒 APP1。但是按键的中断服务程序,不属于APP1 的“上下文”,这是突如其来的,当中断发生时,⑤APP 继续运行它的内核态代码,也就是驱动程序中的函数,复制数据到用户空间并马上返回。的执行过程中,它是可以休眠的。的“上下文”,也就是在。
2025-10-21 15:55:14
281
原创 Linux 系统对中断的演进
硬件中断:对于按键中断等硬件产生的中断 软件中断:人为制造中断 中断处理原则:1、不能嵌套 2、越快越好 当一个中断要耗费很多时间来处理时,它的坏处是:在这段时间内,其他中 当下半部比较耗时但是能忍受,并且它的处理比较简单时,可以用 tasklet来处理下半部。tasklet 是使用软件中断来实现。 总结: ①中断的处理可以分为上半部,下半部 ②中断上半部,用来处理紧急的事,它是在关中断(不允许嵌套)的状态下
2025-10-20 16:16:57
312
原创 异常与中断的概念及处理流程
嵌入式系统中,CPU会被异常和中断打断处理紧急事件。中断源通过中断控制器向CPU发送请求,CPU根据优先级处理。中断处理流程包括初始化中断源、设置控制器、CPU总开关,执行正常程序时,硬件检测和处理中断,软件负责保护现场、处理中断和恢复现场。异常向量表是固定地址的跳转指令表,CPU根据异常类型跳转到对应地址执行处理程序,向量表位置可通过寄存器设置调整。整个流程实现了对异常和中断的高效响应和处理。
2025-10-20 10:35:22
348
原创 Qt编译报错 error: No rule to make target ‘ffplay.c‘, needed by ‘ffplay.o‘. Stop.
1、核对工程目录中的source文件名称。2、删除pro文件中多余的文件名称。
2025-05-30 09:21:00
265
原创 【FFmpeg进阶】2、FFplay播放器实战及源码剖析
可以简单的分为两层,底层是 AVIContext,TCPContext,UDPContext 等等,这些具体媒体的解复用结构和相关的基础程序,上层是 AVInputFormat 结构和相关的程序。上下层之间由AVInputFormat 相对应的AVFormatContext 结构的 priv_data 字段关联 AVIContext 或TCPContext 或 UDPContext 等等具体的文件格式。(FF_REFRESH_EVENT):发送 FF_REFRESH_EVENT 的 SDL_Event。
2025-05-27 22:29:51
1182
原创 【FFmpeg进阶】1、音视频转码器实战
如何使用FFmpeg API获取这些信息:媒体容器封装格式文件播放时长文件平均码率(视频+音频)视频属性(编码器名称、视频分辨率、帧率、编码码率)音频属性(编码器名称、采样率、声道数、编码码率)伪代码:/// 数据结构:大管家婆/// 打开文件/// 查找流信息/// 遍历流信息:音频、视频i++) {///查找解码器= -1) {do {// 寻找视频解码器。
2025-05-27 20:19:35
412
原创 【FFmpeg入门】10、过滤器
FFmpeg filter提供了很多⾳视频特效处理的功能,⽐如视频缩放、截取、翻转、叠加等。其中定义了很多的filter,例如以下常⽤的⼀些filter。scale:视频/图像的缩放overlay:视频/图像的叠加crop:视频/图像的裁剪trim:截取视频的⽚段rotate:以任意⻆度旋转视频。
2025-05-19 21:42:28
1183
原创 【FFmpeg入门】9、编解码层
其中转码涉及比较多的处理环节,从图中可以看出,转码功能在整个功能图中占比很大。解复用器为解码器提供输入,解码器会输出原始帧,对原始帧可进行各种复杂的滤镜处。转码的核心功能在解码和编码两个部分,但在一个可用的示例程序中,编码解码与输入输出。理,滤镜处理后的帧经编码器生成编码帧,多路流的编码帧经复用器输出到输出文件。大流程可以划分为输入、输出、转码、播放四大块。穷举所有的流,查找其中种类为。判断帧的类型,对于视频帧调用。不停地从码流中提取出帧数据。解码完后,释放解码器。
2025-05-19 17:15:19
456
原创 【FFmpeg入门】8、封装层实战
视音频编解码算法十分复杂,占据了转码的绝大部分时间。由图可见,本程序并不进行视频和音频的编解码工作,因此本程序和普通的转码软件相。而是直接将视音频压缩码流从一种封装格式文件中获取出来然后打包成另外一种封装格式。因为不需要进行视音频的编码和解码,所以不会有视音频的压缩损伤。可见视频转码的过程通俗地讲相当于把视频和音频重新“录”了一遍。本例子实现的是将音视频分离,例如将封装格式为 FLV。需要注意的是,本程序并不进行视音频的编码和解码工作。进行视音频的编码和解码,所以节约了大量的时间。2、视音频质量无损。
2025-05-19 10:52:49
482
原创 【FFmepg入门】7、封装层
封装格式则是存储媒体内容的实际容器格式,不同的封装格式对应不同的文件扩展名,很多时候也用文件格式代指封装格式,例如常用 ts 格式(文件格式)代指。但是如果未显式的指定输出封装格式,就只能通过输出文件。裸流格式,所谓裸流就是不含封装信息的流,也就是没穿衣服的流。,容器的称法更为形象,所谓容器,就是存放内容的器具,饮料是内容,h264 本来是编码格式,当作封装格式时表示的是。命令行中,输入文件扩展名是错的也没有关系,因为。扩展名来确定封装格式,就必须确保扩展名是正确的。mux 处理的是输入格式,
2025-05-18 17:16:00
500
原创 【FFmpeg入门】6、AVIO实战
注意中回调函数的使用return ret;return -1;//请同学们自己揣摩0,fp,read_func,0,seek_func);//关联,绑定//告诉编译器是自定义AVIOContext//打开流goto quit;else {\n");goto quit;数据来源可以是文件、内存()、网络。/*** @file*///自定义缓冲区。
2025-05-17 15:51:58
181
原创 【FFmpeg入门】5、协议操作:三大数据结构
针对每种协议,会有一个这样的对象,每个协议操作对象和一个协议对象关联。比如,文件操作对象为ff_file_protocal,它的关联的结构体是FileContext。,这个对象实现了代缓冲的读写操作;FFmpeg的输入对象AVFormat的。指向具体的协议对象(FileContext,HttpContext)。指向具体的协议操作对象(URLProtocal),对象,这个对象封装了协议对象及协议操作对象,其中。字段指向一个AVIOContext。
2025-05-17 10:19:23
219
原创 【FFmpeg入门】2、FFmpeg结构体
视频的话,每个结构一般是存一帧;每种解码器都对应一个 AVCodec。存储输入视音频使用的封装格式。音频使用的封装格式。每种视音频封装格式都对应一个。解码前数据:AVPacket。主要存储视音频使用的协议的类型以及状态。解码后数据:AVFrame。每个AVStream。音频流使用解码方式的相关数据;
2025-05-15 11:00:56
209
原创 【FFmpeg入门】1、FFmpeg框架
使用这个库可以读取电脑(或者其他设备上)的多媒体设备的数据,或者输出数据到指定的多媒体设备上。的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能,包含 demuxers。的意思是被编码到输出文件之前用来修改输入文件内容的一个软件工具。用于视频场景比例缩放、色彩映射转换;在多媒体处理中,filter。库功能主要包括高度优化的。包含一些公共的工具函数。和样本格式转换操作。
2025-05-15 09:59:51
187
原创 模型运行在与 PC 相连的 Rockchip NPU 平台上
问题:* daemon not running;先找到test.py中的config接口,添加target_platform。然后运行test.py,我用的模型例子是mobilenet。解决方法:断开连接线,重启板子,再连线。可以看到rknn server启动成功。再找到init_runtime接口,添加。接口初始化运行环境时需要指定。问题解决,可以查看设备号了。device_id 参数。target 参数和。
2023-10-02 15:11:04
554
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅