
嵌入式
文章平均质量分 65
记录嵌入式开发整理知识
leon.liao
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
行车记录仪 - 碰撞检测
功能需求行车记录仪的核心功能是记录,大部分时候,行车记录仪都是在循环录制视频和音频,而设备的存储空间是有限的,因此录制机制一般是循环覆盖录制,如此一些重要的记录(例如:发生碰撞时的记录)就可能会被覆盖,为了避免这种情况的发生,行车记录仪设备就需要感知这些情况并做特殊处理(例如:备份相应时刻的录像数据)。实现原理碰撞检测是通过物理芯片G-sensor来实现的,加速度发生变化时G-sensor驱动会将加速度上报给应用层,应用层做相应处理。G-sensorG-sensor(Gravity se原创 2021-04-08 17:56:34 · 4641 阅读 · 0 评论 -
行车记录仪 - 录像 - ffmpeg AVPacket 复用
说明基于ffmpeg实现录像功能,写每一帧数据都需要生成一个AVPacket变量传递给av_write_frame,常见流程如下:av_new_packet函数中需要申请一定大小的内存空间存储媒体数据,av_write_frame执行完后再需要使用av_packet_free释放内存空间,在行车记录仪产品大码率,较高帧率,长时间录制的环境下,该循环操作对性能的影响不容忽视,生成AVPacket实测耗时如下:01-01 08:02:13.393 230 478 I get_pack原创 2022-01-07 15:52:05 · 997 阅读 · 0 评论 -
行车记录仪 - 录像存储功能需求分析
需求分析行车记录仪产品的主要作用是记录汽车行驶过程中的现实场景,因此记录(录像录音存储功能)是其核心功能。和其它录像产品(IPC)比较个人做过IPC产品,行车记录仪的录像存储和IPC的录像存储,侧重点是不一样的,如下:IPC产品录像侧重点IPC产品拥有稳定的电源,大部分时候是独自工作的(用户不会一直使用产品),因此IPC的录像侧重点是:存储时长越长越好,方便用户后续回放。行车记录仪产品侧重点行车记录仪产品不一样,正常情况下车主和设备时刻在一起的,正常行驶的录像对于用户来说原创 2021-01-14 18:25:52 · 1081 阅读 · 0 评论 -
声波通讯 - 流式数据处理 - 窗口对齐
问题描述个人当前实现的声波通讯程序原理是:采用两个不同频率的声波表示0和1,按照所需传输数据的二进制编码生成一段声波进行播放,音频接收端使用快速傅里叶算法解析采集到的音频数据,通过解析出的两个特定频率的排列顺序还原出二进制数据。问题:音频频率并不是一个sample的音频就可以解析出,使用快速傅里叶算法解析,需要多个sample的音频数据才能表示一个频率,假设是每40个sample表示一个频率(即一个二进制位0或1),音频接收端也需要以同样的sample个数作为一个解析窗口,由于发送和接收的时间不一定同原创 2021-02-06 19:19:32 · 313 阅读 · 0 评论 -
行车记录仪 - 录像 - 文件缓存
背景基于ffmpeg实现录像功能,性能不理想,前后路摄像头视频码率相加只有28Mbps加上音频也只有4MB/s左右,使用class 10的sd卡 + 2秒 ringbuffer缓存的情况下,依然出现写卡不及时导致的丢帧现象,class 4 sd卡表现更差。分析使用dd命令测试class 10 SD卡在该平台上的读写速度,写速度能达到7~8MB/s,因此丢帧问题不是SD卡写性能不足导致的,是录像逻辑的问题。通过测试定位到ffmpeg接口av_write_frame(写一帧数据)耗时异常,异常部分原创 2022-03-08 17:35:44 · 2385 阅读 · 0 评论 -
IPC - 云台功能
简介云台是承载其它产品(常见于摄像机)并且能够进行水平和垂直两个方向转动的装置。常见应用:云台IPC,用户可以操纵IPC镜头进行上下左右转动,以达到更大的监控角度。抓拍摄像机,配合AI算法,保证摄像机镜头稳定的对准目标,达到更稳定的抓取效果,不会出现拍出来的照片中没想要的物体。实现在安防领域,有两种实现方式:消费类产品,自己实现,和产品整合在一起,不是独立的模块。为了节省成本,消费类产品实现一般比较简单,功能不会太稳定,耐久度也不会非常好,扩展度比较依赖代码实现,但是对于消原创 2020-10-19 11:49:33 · 1716 阅读 · 0 评论 -
人脸算法应用总结
说明2018年专门负责研发人脸相机有一年的时间,在这期间对接了多家公司的算法,例如:瑞为FPGA算法板、君正T01算法板、伟视清提供的软算法、以及一些小公司的软算法,也接触了阅面等公司的算法,特记录下一些理解。人脸相关技术人脸检测人脸跟踪人脸识别人脸检测人脸检测即检测出摄像头采集视频画面中的人脸。遇到问题:早期算法无法识别活体,如果镜头中有玻璃反射出的人脸以及书籍上的人脸、照片等无意义的人脸都会被检测到,浪费了一定性能,当前算法应该大部分支持活体检测。人脸跟踪人脸跟踪即跟踪原创 2020-10-31 17:18:36 · 315 阅读 · 0 评论 -
行车记录仪 - 国际化 - 光源频率/电源频率
说明之前做IPC(IP camera)项目时,IPC有一个设置项叫做电源频率,可选值有50HZ/60HZ;当前做行车记录仪项目,也有一个设置项:光源频率或者光源闪烁频率,可选值也是50HZ/60HZ,之前并未过多在意,只知道该设置项的作用但不清楚为什么要可设置,故记录下。理解基础概念光源频率/电源频率这两个设置项配置的是同一个属性,即交流电的频率,众所周知,平常生活中使用的电源是交流的,方向交换频率有50Hz/60Hz两种,中国是50HZ,而有的国家或地区是60HZ。为什么要可设置原创 2021-02-05 17:47:16 · 9944 阅读 · 1 评论 -
在线升级 - 差量升级
说明当前产品在线升级功能升级速度较慢,分析原因如下:升级方式是完整包升级,升级包比较大,有200多M。网络环境较差,是弱网环境,通过WIFI联网,并且使用环境是印尼,网速较慢。解决方案:希望通过差异升级的方式加快升级速度。差异升级:生成两个版本的二进制差异包,在线升级时只需要下载差异包,再将保存的旧版本和差异包合并生成新版本,再使用新版本进行升级。分析差异升级的优劣优...原创 2020-04-10 20:10:29 · 892 阅读 · 0 评论 -
差异更新-BSDiff算法解析
说明解析基于算法库bsdiff-4.3.tar.gz。算法主要是两个源码文件:bsdiff.c(根据老版本和新版本生成补丁文件)和bspatch.c(根据老版本和补丁文件生成新版本)。个人还未完全理解BSDiff算法,主要是后缀数组的实现未理解,暂时将后缀数组实现函数qsufsort和split当做黑盒,记录说明下其它操作。解析算法主要集中于bsdiff.c,bspatch.c生成新版本较为简单,只是对数据的使用,并没有复杂操作,但是查看代码时可用来对照判断bsdiff.c中写入数据的作用。原创 2020-08-19 21:48:19 · 2550 阅读 · 0 评论 -
配置文件功能
根据作用分类配置文件根据作用可以分成两种:配置项文件,一个文件包含了所有的软件配置项,软件配置从文件中读取,更灵活。设置项保存文件,一个文件存储软件设置的参数。文件存储方式二进制优点:数据量小,读写快,性能快,不需要解析缺点:可读性不好,如果需要手动修改,会比较麻烦字符串存储xmljson自定义格式,例如:window下ini文件格式,c...原创 2019-08-19 20:14:38 · 2019 阅读 · 0 评论 -
嵌入式研发工作划分
什么是嵌入式研发嵌入式研发的标志是:软件研发和硬件研发相互配合。互联网是固定硬件平台,纯软件开发;机械是没有软件,纯硬件开发。当今的大部分电子,除去硬件部分就是软件,大到电冰箱,电视,小到遥控里面都是由软件来控制的,为了更通用和自由定制,交由软件控制会越来越多。工作划分一个电子产品的研发工作由四部分组成。硬件研发;主要将硬件平台设计出来。驱动研发;驱动研发主要工作是在不同系...原创 2020-02-17 10:04:28 · 406 阅读 · 0 评论 -
程序架构 - 多线程架构和多进程架构选择思考
面试问题嵌入式平台下,应用多线程架构和多进程架构如何选择?问题分析该问题只有限定在嵌入式平台才有可问性,在PC平台,除非特殊限制或者系统原因,大部分复杂程序都是采用的多进程架构,因为需要充分利用资源。该问题虽然是问多线程还是多进程,但实际应用中基本上都是“进程+线程”的结合方式,并不是非此即彼,问题的重点在于是否创建多个进程。因此该问题可以分为两个问题:嵌入式平台下,是否必要将应用层划分为多个进程。功能在线程和进程之间如何划分,即哪些功能适合存在于多个进程,哪些功能适合存在于单进程中原创 2020-07-20 20:39:09 · 898 阅读 · 0 评论 -
嵌入式产品防盗版
说明在电子产品开发中,防止产品被盗版是一个必须考虑的问题,技术成熟的公司都会有相应措施。盗版的危害盗版拥有价格优势,侵占原版市场开发新产品,成本和时间支出占很大比例的就是研发,而盗版产品,不需要研发支出以及相应的时间支出,因此可以接受比原版更低的价格售卖,进行压价,占有原版市场。盗版质量不行,影响原版声誉盗版厂商可能利用有原厂背锅的因素,为获得更大的利益,采用低价材料;或者盗版实力不强,导致盗版结果不完美,影响原版评价。盗版的可行性熟系电子产品的都知道,盗版是可行的,如原创 2020-12-14 09:50:43 · 529 阅读 · 0 评论 -
nor flash 应用层操作
说明flash是嵌入式开发中接触频繁的器件之一,有很多功能依赖于它,例如:升级时需要将升级文件写入flash;有些平台在flash上划分一块区域,实现保存配置(nvram)功能。使用应用层,我们平常会直接使用命令操作flash,例如:使用flashcp烧写flash分区,使用flash_eraseall清空flash分区,使用flash_lock_unlock对flash加锁取消锁等;即使是项目代码中也常看到直接调用这些命令操作flash。为了更好理解命令的实现原理和实现自己的需求(当前平台没原创 2020-12-29 20:42:55 · 1206 阅读 · 0 评论 -
嵌入式软件自举
说明对于需要长时间运行的电子产品,例如:安防监控等,如果设备程序崩溃后不能自动恢复,可能会出现以下情况:设备操作无反应,用户以为设备坏掉了,并不知道需要断电重启,对产品质量怀疑。程序崩溃后所有功能中断,有些重要并且需要长时间稳定运行的功能无法延续,例如:定时闹钟等。对于智能音箱,需要实现定时闹钟等定时功能,需要长时间稳定运行,因此需要实现软件复位功能。程序崩溃是无法避免的程序崩溃的可能原因有:程序测试不充分,有bug导致程序崩溃,可以降低概率,但是无法彻底避免,中小公司产品非原创 2020-06-30 19:56:53 · 722 阅读 · 0 评论 -
Linux平台下hook技术研究
说明之前公司,C项目中为了程序检测内存泄漏问题,采用一个自己实现的库,能够记录内存分配和释放操作,程序结束或者通过信号可以生成dump信息来分析内存问题。技术分析内存分配和释放记录主要是通过hook(钩子)技术来获取的。hook技术通过预处理实现实现方式:创建一个头文件,通过宏替换的方式替换掉内存分配(malloc,calloc,realloc)和释放函数(free)。创建一个源文件,定义替换函数,在替换函数中记录调用和调用真正的目标函数和做相应处理。代码示例:* 头原创 2020-07-01 21:44:33 · 498 阅读 · 0 评论 -
国际化 - 多时区支持
说明很多嵌入式产品都支持多时区,用户可以在客户端上选择和设置设备的时区。在Linux上时区的切换是一件比较简单的事情,但是多时区的支持并不仅仅是时区的切换,编程中也有很多需要注意的地方,特记录下。注意项使用格林威治时间而不是具体时区时间程序中变量存储的应该是格林威治时间,即零时区时间,而不是具体时区时间,需要显示或者使用时再根据选择的时区进行转换。原因:如果使用具体时区时间,更改时区后就需要进行时间转换,转换则需要知道之前的时区,并且能够进行转换,一些场景下的时间是不好甚至不能够被更改的,原创 2020-10-30 21:15:03 · 843 阅读 · 0 评论 -
嵌入式Linux平台下SD卡使用
说明在嵌入式开发中,SD卡是比较常用的器件,记录下其使用方法。底层配置驱动调试。内核配置。Linux内核选项device deivers -> mmc/sd card support -> Samsung s3c sd/mmc card interface support应用层使用硬件识别和显示如果SD卡驱动和内核配置ok,插入SD卡后,内存文件系统目录/sys/bus/mmc/devices/下会自动生成文件节点来表示SD卡,例如:mmc0:504原创 2020-11-16 21:06:49 · 4622 阅读 · 0 评论 -
标准库 uClibc
简介PC上常用的标准库glibc是一个非常宠大而完整的库,但是对于嵌入式系统来说,其体积显得过于大了一些;uClibc的提出就是为了解决这个问题。uClibc尽可能的兼容Glibc,大多数应用程序可以在很小或完全不修改的情况下就可能使用uClibc替代glibc;通过uClibc来代替Glibc,可以在不改变应用程序功能的前提下,大大减少发布文件的大小,无论应用程序以静态链接来编译,还是以动态链接形式编译。使用在嵌入式平台,标准库(不管是glibc还是uClibc)的使用,有两种情况。环原创 2020-11-18 09:46:04 · 2365 阅读 · 0 评论 -
嵌入式Linux时区设置
说明在多个平台进行时区设置,发现有多种方式,有的组合设置能生效但是有些组合不能,有些不解,特记录一下。时区设置早期平台(gm8126平台)之前gm8126板子上时区设置只需要将相应的时区文件覆盖掉/etc/timezone即可。/etc/timezone是时区文件,里面内容是复杂不可读的时区信息。平台使用glibc。MTK8516平台MTK8516平台使用systemd系统为初始化进程(init)。设置时区需要使用以下命令:sudo timedatectl set-timez原创 2020-11-11 19:19:39 · 1557 阅读 · 0 评论 -
busybox 移植使用
简介busybox是Linux上的一个应用程序,它整合了许多最常用的工具和命令,如rm, ls, gzip, tftp等,是嵌入式平台根文件系统中常用的构建模块。由于busybox程序小,占用内存少并且功能强大,编译后只有单个程序,特别适合资源敏感的嵌入式系统,因此常用来构建嵌入式平台的根文件系统。使用说明官网:http://www.busybox.net/下载地址:https://busybox.net/downloads/下载地址中包含了所有的busybox版本,有些是stable版原创 2020-11-04 21:23:13 · 1036 阅读 · 0 评论 -
IC - reset子系统
【代码】IC - reset子系统。原创 2023-11-03 20:02:20 · 653 阅读 · 0 评论 -
cpu cache flush 和 内存 invalidate
背景嵌入式开发中遇到问题:将SD卡中某个文件读取到一块内存中,再将该内存地址发送给外设硬件,硬件通过该地址读取数据做处理,处理结果异常,并且现象有以下规律:通过代码实现将SD卡中的文件数据拷贝到新文件中,文件是正常的。外设硬件处理前,先使用代码使用一次该块内存,即使是简单的打印,处理结果也是正常的。问题分析从问题现象很容易会想到和缓存有关,但是应用层/OS创建的DDR缓存还是cpu L1/L2/L3 cache需要确认下,最终该问题测试验证是cpu cache导致的。嵌入式开发中,cp原创 2022-05-11 11:05:31 · 2985 阅读 · 0 评论 -
alios thing - rhino内核 - 内存管理
alios thing 内存管理原创 2022-04-11 20:03:25 · 3509 阅读 · 0 评论 -
软重启(reboot)
说明嵌入式开发中,重启操作是最常用的操作之一,由于其操作简单,不容易受到关注,但是不同的重启方式实现和现象其实是不一样的。断电重启操作:关机后再开机,例如:拔掉电源再接上电源或者电池没电后再充电开机。该方式是完整的重启操作,硬件会重新上电,内存等都会被重置,软件会重新执行,重新初始化等。软重启操作:在Linux平台上手动执行reboot命令重启设备,其它平台类似。不同于断电重启,软重启是软件机制,其通过信号或者其它方式通知各个模块设备需要重启,模块需要自己实现模块的重启,从而实现设备原创 2020-12-19 15:07:36 · 15044 阅读 · 1 评论