Open_Water
码龄9年
关注
提问 私信
  • 博客:83,112
    83,112
    总访问量
  • 30
    原创
  • 1,041,905
    排名
  • 34
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:江苏省
  • 加入CSDN时间: 2015-08-02
博客简介:

Open Water的博客

查看详细资料
个人成就
  • 获得44次点赞
  • 内容获得8次评论
  • 获得168次收藏
  • 代码片获得134次分享
创作历程
  • 2篇
    2023年
  • 2篇
    2022年
  • 3篇
    2021年
  • 15篇
    2020年
  • 8篇
    2018年
成就勋章
TA的专栏
  • Linux进程管理
    2篇
  • ALSA
    8篇
  • Linux进程笔记
    2篇
  • 虚拟化技术
    1篇
  • C语言
    13篇
兴趣领域 设置
  • 人工智能
    聚类
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

ZMQ发布订阅示例代码

【代码】ZMQ发布订阅示例代码。
原创
发布博客 2023.03.11 ·
359 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

C++ List使用

【代码】C++ List使用。
原创
发布博客 2023.03.10 ·
119 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

给定一个整数数组 nums 和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。

给定一个整数数组 nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。来源:力扣(LeetCode)链接:https://leetcode.cn/problem.
原创
发布博客 2022.08.07 ·
6698 阅读 ·
3 点赞 ·
0 评论 ·
18 收藏

使用poll监听可用文件描述符示例代码

使用poll示例代码
原创
发布博客 2022.07.28 ·
255 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

cmake如何导入开源项目的动态链接库

cmake_minimum_required(VERSION 2.8.9)set(TARGET_HELLO_APP hello_app)# 设置源代码路径set(HELLO_APP_SOURCES hello.cpp)# 包含外部依赖库的头文件路径include_directories( include include/eigen3 include/glog include/gflags)# 引入外部的依赖库,lib跟CMakeLists.txt同.
原创
发布博客 2021.11.15 ·
1264 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

cmake动态库的生成和调用

1. 文件拓朴图.├── bin│ └── main.cpp├── build├── CMakeLists.txt├── include│ ├── add.h│ └── sub.h└── src ├── add.cpp └── sub.cpp2. add.h内容如下:int add(int a, int b);3. add.cpp内容如下:#include "add.h"int add(int a, int b){ retu...
原创
发布博客 2021.11.11 ·
1169 阅读 ·
1 点赞 ·
0 评论 ·
12 收藏

C/C++读写文件操作

#include <iostream>#include <fstream> #include <string>#include <cstdio>#include <string.h>#include <stdlib.h>#include <stdio.h>using namespace std;int main(int argc, char* argv[]){#if 1 //std IO wri..
原创
发布博客 2021.11.07 ·
367 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux创建进程的流程

Linux系统中提供系统调用fork、vfork、clone的接口用于创建多进程,内核本身创建内核线程的接口是kernel_thread。而它们最终都会调用_do_fork()来创建进程或者内核线程。它们的区别是在于flag的不同,大致的流程如下图所示:_do_fork简要流程...
原创
发布博客 2020.07.03 ·
701 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

start_kernel分析总结

从进程的角度分析start_kernel函数,从大的方向可分成三个进程,即:进程0,进程1,进程2。注:其实在内核中是没有进程说法的,在Linux内核中用来描述一个进程或者线程,都是描述为task_struct,即任务。以下方便还是以进程这个说法来描述。进程0:由来:唯一一个没有通过fork或者kernel_thread产生的进程,在内核初始化过程中,进程0则是由静态定义构造出了一个task_struct。职责:1. 初始化内核各个组件,包括mm、vfs、timer、process sched
原创
发布博客 2020.07.02 ·
303 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

ALSA架构中DMA的使用

ASoC中的Platform驱动分为两个部分:snd_soc_platform_driver和snd_soc_dai_driver。其中,snd_soc_platform_driver负责管理音频数据,把音频数据通过DMA传送至cpu dai中。注册声卡驱动时候,DMA驱动需要预先设置DMA一致性以及申请playback和capture所需的DMA Buffer。像snd_pcm_ops中的open、hw_params函数是在应用程序进行open("/dev/snd/pcmC0D0p")时,会进行调用。而t
原创
发布博客 2020.06.22 ·
1496 阅读 ·
1 点赞 ·
0 评论 ·
21 收藏

音频时钟

音频时钟主要由负责编解码器正常工作的主时钟和产生正确的音频播放和捕获采样率数字时钟组成。主时钟每个音频子系统需要由主时钟进行驱动(有时称为MCLK或SYSCLK)。音频的主时钟的来源可以是外部晶振,PLL,CPU时钟,主时钟主要负责产生正确的音频播放和捕获采样率。数字时钟数字音频接口通常由位时钟(通常称为BCLK)进行驱动。BCLK通常用于通过编解码器和CPU之间的链接驱动数字音频数据。数字时钟除了BCLK外,还有帧时钟(LRCLK),以信号通知每个音频帧的开始。 该时钟有时称为LRC(左右时钟
原创
发布博客 2020.06.17 ·
3216 阅读 ·
3 点赞 ·
0 评论 ·
12 收藏

Digital Audio Interface介绍

ASoC当前支持当今在SoC控制器和便携式音频编解码器中发现的三个主要数字音频接口(DAI),即AC97,I2S和PCM。AC97总线:AC97是五线接口,通常在许多PC声卡上都可以找到。 现在,它在许多便携式设备中也很流行。 该DAI具有一条复位线,并在其SDATA_OUT(播放)和SDATA_IN(捕获)线上进行时间复用。 位时钟(BCLK)始终由编解码器(通常为12.288MHz)驱动,而帧(FRAME)(通常为48kHz)始终由控制器驱动。 每个AC97帧长21uS,分为13个时隙。I2S
原创
发布博客 2020.06.16 ·
2446 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

Linux进程调度子系统

学习Linux进程调度子系统,需要合理进程拆分,逐一击破。关于Linux进程调度子系统可以拆分如下五个大方向:一、Tasks1. tasks如何在Linux内核中表示:struct task_struct2. Linux如何在用户态和内核态下分别创建task_struct3. Linux中task_struct相关属性,如调度策略,PID等等二、Scheduler Class1. Linux内核关于进程调度的五种调度算法2. Linux高版本上默认的调度算法三、Scheduler1.
原创
发布博客 2020.06.16 ·
507 阅读 ·
2 点赞 ·
1 评论 ·
3 收藏

虚拟Codec设计思路

虚拟Codec设计思路就是只提供SoC到Codec端的PCM接口,Codec端的内部路由不做控制。统一化代码时需要将平台端与Codec端代码分析,设计思路如下所示:虚拟Codec平台化
原创
发布博客 2020.06.15 ·
633 阅读 ·
1 点赞 ·
0 评论 ·
3 收藏

如何使用宏定义求两个数的最大值

源代码如下所示:#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#define max_t(type, x, y) ({ \ type __max1 = (x); \ type _...
原创
发布博客 2020.06.08 ·
1613 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

PCM的open流程

在系统初始化后,关于声卡驱动的加载流程主要先跑Step 1-->Step 2-->Step 3这个顺序进行加载。首先Step 1是声卡驱动的入口函数,其次Step 3是我们装载声卡驱动模块的入口函数,最后Step 3是用户空间的应用程序打开pcm设备节点。该图是声卡0,设备0且以打开播放设备为例,录音的流程基本相似,再此不做复述。PCM的open流程...
原创
发布博客 2020.06.02 ·
2906 阅读 ·
8 点赞 ·
1 评论 ·
19 收藏

ALSA声卡注册流程

嵌入式声卡驱动主要分为Platform Driver、Codec Driver、Machine Driver三部分,声卡驱动的注册是Machine Driver的注册进行展开。按照ALSA架构看,声卡的注册流程是自底向上进行展开。也就是具体的Machine驱动,和Codec驱动以及Platform驱动,接下来再往ASoC核心层,再到ALSA核心层。通过下图大致描述一下这整个过程:声卡驱动注册流程...
原创
发布博客 2020.05.28 ·
1996 阅读 ·
9 点赞 ·
4 评论 ·
30 收藏

Linux声卡驱动涉及重要结构体

struct snd_card是在ALSA Core层的核心数据结构,而snd_soc_card是ASoC层的核心数据结构。在嵌入式系统中,声卡驱动一般只需要关注两个逻辑设备:PCM设备跟Control设备。PCM设备用于管理音频数据,而Control设备用于Codec物理设备。下图尽可能描述声卡驱动所涉及的重要数据结构。ALSA关键数据结构...
原创
发布博客 2020.05.27 ·
715 阅读 ·
3 点赞 ·
0 评论 ·
8 收藏

Linux内核线程管理

内核线程的调度和管理都是通过kthreadd(pid=2)进行管理的,内核线程kthreadd通过进程0创建,而创建内核线程通过函数kernel_thread进行创建。kthreadd如何管理内核线程和调度如下所示:标Linux内核线程管理题...
原创
发布博客 2020.05.22 ·
364 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

虚拟化技术架构分类

宿主架构:直接在操作系统之上安装和运行虚拟化程序,而这种虚拟化程序的稳定性完全取决于宿主操作系统的稳定行,该虚拟化程序依赖于主机操作系统对设备的支持和物理资源的管理。宿主架构裸机架构:除了宿主架构外,接下来就是裸机架构的虚拟化,裸机架构虚拟化就是虚拟化软件可以直接在硬件上面进行安装,然后操作系统在虚拟化逻辑层上安装操作系统和应用,依赖虚拟层内核和服务器控制台进行管理。裸机架构智能座舱:虚拟化技术应用方向很多,这里主要介绍车载智能座舱领域的虚拟化,目前符合车载标准的也只有QNX He
原创
发布博客 2020.05.21 ·
2654 阅读 ·
2 点赞 ·
1 评论 ·
5 收藏
加载更多