- 博客(63)
- 问答 (1)
- 收藏
- 关注
原创 蓝牙和音频速率
低速:125kbit/1Mbit/2Mbit 每秒,125k不满足,其余满足。mp3音频,采样率44100,16bit位深,即每秒采样44100次,每次采集16bit,低速:1~3Mbit/s(满足);高速:24Mbit/s(满足),高速:48Mbit/s(满足),
2024-11-24 15:48:16
579
原创 C++面试问题
6答:没有区别,都是返回string字符串的实际字符数,最开始只有length(),是匹配C语言的,后来有了STL,又有了size(),匹配容器,容器都用size。同样插入一个元素,普通map性能比unordered_map要差,因为map插入元素后还要实现红黑树的自平衡,unordered_map没有这个过程。(刷leetcode遇到,普通map也可以通过,官方题解用了unordered_map)。8答:map内部是红黑树实现(一种自平衡二叉查找表),unordered_map 内部是哈希表实现。
2024-11-24 15:47:00
144
原创 MNN NC4HW4
524288=512*512*2]156, [..89]158, [..90]158, [..91]158, [..92]159, [..93]160, [..94]157, [..95]156, [..96]159, 这是第三channel,82, 141, 156, 0, 0, 0, 0, 0, 84, 143, 158, 五个零, 84,143,158, 五个零, 84,143,158, 五个零... ...float *outDat = (即input Tensor host内容)
2024-11-24 15:44:03
173
原创 YUV422
U(Cb = Color blue)表示色度分量:B-Y,图像蓝色部分去掉亮度,反映了RGB输入信号。A260-1680 项目所用摄像头模组,输出的yuv422,是先存所有的y,然后uv交叉存储。对于packed的YUV格式,每个像素点的Y,U,V是连续交*存储的。(3)yuv420: 每上下各2个共4个y配一个u和一个v;点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。(a)yuv交叉存储,y总在最前,后面先u后v;(c)先存y,再单存u,最后单存v;(d)先存y,再单存v,最后单存u;
2024-11-23 18:17:23
268
原创 NHWC to NCHW
值得注意的就是MNN.Tensor传入的图片是(3,256,256)的,但inputVar传入的是(1,3,256,256),需要用numpy增加多一个维度。pytorch用的是NCHW格式,MNN则会通过copyFrom把NCHW转化成NC4HW4,可想而知特征图也都是NC4HW4的了,所以要提取特征图的话需要先把格式转化回来。《MNN框架下的特征图格式问题》 : https://blog.youkuaiyun.com/weixin_43840139/article/details/109814869 ,
2024-11-23 17:22:05
173
原创 Win10 Edge浏览器修复重装
2.找到“HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge”。(没有Edge就新建项,命名为“Edge”)。3.新建“DWORD(32位)值”,将值名改为 RendererCodeIntegrityEnabled,双击值名称,将数值数据项改为 0(默认值0)。Microsoft Edge浏览器 打开网页报“兼容性问题”,只有点开右上角三个点然后点“设置”后,才能固定显示这个错误。Win10 Edge浏览器突然就坏了,啥网页也打不开。
2024-11-23 17:01:46
531
原创 CEVA 学习
3、Ceva float指令有 1 cycle 开根号,求导数的指令vfpinv,vfpsqrt,vfpsqrti。Ceva的这个编译器,license每年2500美刀,永久版是10000美刀,Ceva的仿真器,3000美刀。6、条件判断影响并行,可以先做一个循环把有效数据提取出来,再做一个循环真正处理数据。1、Ceva并行L/S指令,vpld,vpst,一次可以加载8个数据,远比Neon,SSE强大,可以跨距超大加载,还支持自定义索引。8个数据的索引可以是(2,3,5,7,9,10,11,13)
2024-11-23 16:37:41
287
原创 浮点数-十六进制转换
所以网站是阅读顺序: 0x3ea45a1c, 由左到右是 高字节-->低字节,VS是存储顺序: 由左到右 是 低字节-->高字节。
2024-11-23 16:36:02
2409
原创 Linux程序变量名往往很短
变量名短还有个好处,就是函数调用不用写成2行,这样gdb调试只需要一个n(next)就执行完函数,否则有几行就得几个n,最后一个n才执行函数。难怪很多linux程序中的变量名都很短,如果变量名很长,那就只能动鼠标复制了。变量名短的情况下,可以直接手敲。因为要用gdb调试啊,
2024-11-23 16:34:02
101
原创 English01
CEVA-XM4 包含由40个 256bits vector register组成的VRF,一对vector register可组成512bit累加器,v0-v31共32个可用作通用向量寄存器(general-purpose vector register), v24-v39共16个可用作累加器,意味着,v24-v31既可用作通用向量寄存器也可用作累加器。Post Shift : 对应的是Pre Shift,前者是先操作后移位,后者是先移位后操作。concurrent : 并发的。
2024-11-22 12:44:26
312
原创 IO效率 计算效率
理论计算时间 / max(理论IO时间,理论计算时间) = 理论计算效率峰值。理论IO时间 / max(理论IO时间,理论计算时间) = 理论IO效率峰值。理论计算量theory_ops / 算力= 理论计算时间,理论IO时间 / 总硬件耗时 = IO效率。理论计算时间 / 总硬件耗时 = 计算效率。理论数据量 / 带宽 = 理论IO时间,
2024-11-21 21:57:58
115
原创 C++ 智能指针转普通指针
(2) 智能指针在函数内部定义后,使用 .get() 依然能获得nullptr,但用普通指针同样在函数内部定义后,默认是0xcccccccc,需要手动赋初值为0.ceva环境不支持智能指针,需将 std::shared_ptr 这些智能指针转为普通指针,但是有些注意地方,(1) 智能指针支持以抽象类作为模板创建指针,但是普通指针不可以,比如。需要把普通Tensor*指针转为 shared_ptr 智能指针,是不行的,编译报错,说不能用抽象类定义指针变量,只能改为。
2024-11-21 21:24:05
386
原创 C++ 虚函数 纯虚函数
纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。看到深度骨架代码在类里定义了一个virtual虚函数,同时又实现了这个虚函数,且这个类没有子类,虚函数不是子类继承用的吗?定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数.定义一个函数为虚函数,不代表函数为不被实现的函数。定义一个函数为纯虚函数,才代表函数没有被实现。
2024-11-21 21:11:34
144
原创 C++ shared_ptr 智能指针
并且,由于该类型智能指针在实现上采用的是引用计数机制,即便有一个 shared_ptr 指针放弃了堆内存的“使用权”(引用计数减 1),也不会影响其他指向同一堆内存的 shared_ptr 指针(只有引用计数为 0 时,堆内存才会被自动释放)。内存管理机制,C++11 新标准在废弃 auto_ptr 的同时,增添了 unique_ptr、shared_ptr 以及 weak_ptr 这 3 个智能指针来实现堆内存的自动回收。//或者 std::shared_ptr p5 = std::move(p4);
2024-11-21 21:04:03
584
原创 C++ =delete
C++11中,当我们定义一个类的成员函数时,如果后面使用"=delete"去修饰,那么就表示这个函数被定义为deleted,也就意味着这个成员函数不能再被调用,否则就会出错.原因就是Son子类没有自己的构造函数,引用了父类的构造函数,但父类构造函数带=delete不能被调用,导致报错。错误(活动) E1790 无法引用 "MNN::Son" 的默认构造函数 -- 它是已删除的函数。创建Son类实例就会报错,
2024-11-16 11:51:57
162
原创 C++ auto
/不可以,编译器根据第一个子表达式已经推导出 auto 为 int 类型,99.5是double,与int冲突。注意:使用 auto 类型推导的变量必须马上初始,因为 auto 在 C++11 中只是“占位符”,并非如 int 一样的真正的类型声明。//推导为int,注意:右边的表达式是一个引用类型时,auto 会把引用抛弃,直接推导出它的原始类型。//推导auto为int, 整数默认推导为int。
2024-11-16 11:50:17
212
原创 C++01
在C/C++中,宽字符类型wchar_t 它和我们熟悉的char类型是一样的,只不过,涉及宽字符的相关库函数,都要用宽字符类型的库函数来处理,一般有w作为前缀。比如,’赵‘这个字,用2个字节来表示,同样,‘A’也用两个字节来表示,这样虽然浪费了一部分内存空间(因为原来一个字节能表示的字符,现在都需要两个字节),但是,解析的时候会方便多了。这样下来,如果存储一个带有中英文的字符,会比较麻烦,因为,你需要额外的一个数组,来表示上面的字符数组的每个元素,所占用的字节,这样才能正常解析。如此一来,简直太麻烦了。
2024-11-16 11:49:46
665
原创 C++ && 传参 引用 右值引用
函数形参用双与号 && 修饰,表示形参为右值引用,传入实参必须是右值。单与号 & 修饰是"左值引用", 双与号 && 修饰是“右值引用”。经常在MNN源码看到&&, 这个双与号什么意思?MNN里Session类的构造函数是。
2024-11-16 11:48:18
174
原创 C C++ 宏 do while(0)
二、 多行语句的宏,用 do{,} while(0) 包含起来,这样不易造成性能负担,也可防止展开时出错。一、 表达式宏能少用就少用,可以用 inline 函数代替, 表达式宏的表达式两边最好加括号().这里第一条我以前就知道,第二条在CEVA-CV代码见过,同事说也是网上看到的没做深究。
2024-11-16 11:44:36
156
原创 Anaconda01
pip install opencv-contrib-python==3.4.1.15 安装opencv扩展,版本要与opencv一致,opencv 3.4.2 后有些算法申请了专利工具包无法看到源码,所以安装3.4.1.15版本。cd Scripts 多个版本python必须进入想要版本的Scripts目录才能用pip,安装Anaconda,然后运行Anaconda PowerShell Prompt,"python" 查看是否打印python版本信息验证安装Anaconda安装成功,
2024-11-16 11:41:56
166
原创 数据上溢和数据下溢
数据下溢:数据最小分辨率低于fp16/bf16能表示的最小分辨率,导致梯度等参数明明有更新时,因为fp16/bf16分辨率不够细导致参数并无变化。用fp32+fp16 或者 fp32+bf16 混合精度训练模型时,会出现数据上溢和下溢。数据上溢:数据范围超过fp16/bf16表示范围。单精度浮点数fp32,半精度浮点数fp16,
2024-11-16 11:38:50
192
原创 C++实践
产生警告 C6283: <变量> 是使用数组 new []分配的,但随标量删除一起删除。此缺陷可能会导致泄漏、内存损坏,并且当运算符被重写时,会崩溃。
2024-11-16 11:37:10
210
原创 0xbeef 0xdeadbeef
Dog food”指的就是就是Cisco在IPv6上“eating its own dog food”(也即用自家的设备)的做法。Hexspeak的转写规则为:数字“0”表示字母“O”,“1”表示“I”或“L”,“5”表示“S”,“7”表示“T”,“6”、“9”则各自表示“G”与“g”,其它的数字则可利用。0xBAADF00D(“bad food”)在微软的LocalAlloc(LMEM_FIXED)函数中使用,用以在已启用调试堆的情况下,标识未初始化的分配堆内存。
2024-11-16 11:20:54
709
原创 notepad++ 双击高亮|多格式标记
1、双击高亮颜色设置:设置——语言格式设置——Global style——样式——Smart Hightlighting2、打开双击高亮功能:设置——首选项——高亮——勾选“启用智能高亮”3、使用不同格式标记多个对象3.1 使用格式1——5进行标记 : ctrl+1→5(default)3.2 清除格式:搜索——清除颜色标记——分别选择清除格式1-5修...
2024-11-16 11:10:05
1014
1
原创 extern c详细用法
xtern "C"的用法解析2012-03-20 23:29 by Rollen Holt, 88007 阅读, 16 评论, 收藏, 编辑1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”)...
2024-11-16 11:09:48
753
1
原创 .json文件
第三种类型是映射mapping,也就是一个名/值name/value,即数据有一个名称,还有一个与之相对应的值,这又称作散列hash或字典dictionary,比如“蓉城:成都”。可见,json非常易学易用,所以,在短短几年中,她就取代了xml,成为了互联网上最受欢迎的数据交换格式。第二种类型是序列sequence,也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组array,或者列表list,比如“成都,重庆”。JSON采用完全独立于语言的文本格式,但也使用了类似于C语言家族的习惯。
2024-11-16 10:42:43
224
原创 bootloader作用
其实bootloader主要的必须的作用只有一个:就是把操作系统映像文件拷贝到RAM中去,然后跳转到它的入口处去执行。当然,为了实现这个功能(以及其它附加功能),我们必须对硬件做一些必要的初始化,这个也是必须的(废话!)。除了这个必须的,现在的bootloader还常常会加入以下功能:1.将操作系统映像文件写入FLASH/硬盘等:读取过来的操作系统文件,除了可以拷贝到RAM中直接运行...
2020-01-29 09:34:26
683
原创 自己出题
long a=-25;unsigned long b = (unsigned long)a;a=(long)b;printf("%d",a);的输出结果?答: -25long a=-25;unsigned short b = (unsigned short)a;a=(long)b;printf("%d",a);的打印输出结果?输出结果: 655...
2020-01-29 09:33:12
258
原创 面试问题
陶瓷电容与钽电容区别Dcdc ldo区别阻抗匹配单片机开发感想代码量底层板框图。任务调度是怎样进行的。他们做多核架构的平台,自己裁剪linux。...
2020-01-29 09:32:27
176
原创 vs code 插件|中文|跳转|折叠
1、无脑安装一直下一步。2、最左侧extension是装插件的地方——搜索框分别搜索——c/c++,c++ Intellisense,Guides ,ARM进行安装。前两个在拖入一个c文件时会自动提示安装。3、跳转:ctrl+左击————到definition。ctrl+Alt+左击————新窗口打开定义。Alt+← ————返回上一处,Alt+→是到下一处。...
2020-01-29 09:31:01
2808
原创 C语言的符号重载
static 在函数内部:表示该变量的值在各个调用间一直保持延续性。在函数外部:表示本函数只对本文件可见。extern用于函数定义:表示全局可见(属于冗余的)。用于变量:表示它在其他地方定义。void用于函数返回值:表示不返回任何值。用于函数指针:表示通用指针类型。位于参数列表:表示没有参数。*乘法运算符;用于指针;声明中表示...
2020-01-29 09:28:16
179
原创 汇编前变址、后变址、回写
前变址: ldr r0,[r1,#4] ;[r1+4] →r0前变址回写:ldr r0,[r1,#4]! ;r1+4→r1,[r1]→r0后变址回写:ldr r0,[r1],#4 ;[r1]→r0,r1+4→r1...
2020-01-29 09:27:30
1152
原创 vld1 vld2
Vld1.s32 {q0,q1},[r0]Q0: 0x00000004000000030000000200000001Q1: 0x00000008000000070000000600000005vld2.s32 {q0,q1},[r0]Q0: 0x00000007000000050000000300000001Q1: 0x00000008000000060000000...
2020-01-29 09:26:28
508
空空如也
C语言BOOL变量是不是用枚举更好一些?
2016-04-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人