- 博客(211)
- 资源 (24)
- 收藏
- 关注
原创 嵌入式内存泄漏造成死机的问题如何管控
那怎么提高这种代码的管理质量呢?1、有一个好的,达成共识的编码规范;2、增加人工review代码的流程,了解设计者的逻辑;3、测试用力覆盖面增加,尽量不留死角;4、加强培训,提高编码能力,降低埋bug可能性;5、引入自动化工具,比如sonar,功能强大,真的挺不错的。
2021-12-04 17:44:14 962
原创 快速处理倒车影像的设计研究与实现
详细分析当前基于Android 系统的车载中控和智能后视镜倒车影像显示系统在系统启动阶段显示慢的问题, 如果驾驶员强行倒车可能会带来安全隐患, 以及双系统的处理方案成本高, 市场接受度不高。通过深入分析车载中控和智能后视镜的Android 系统启动流程, 提出了一种在U-boot 中处理倒车影像显示的解决方案, 可以快速处理倒车影像显示, 从系统上电到显示倒车画面在2.5s 左右完成, 非常迅速, 也充分考虑了在U-boot 过了倒车检测点到内核启动完成具备倒车显示功能时这段盲区的处理方案, 充分保障了启动
2021-04-13 20:45:31 895 1
原创 电子技术应用: 基于ADAS的汽车倒车防碰撞系统设计与研究
2021年电子技术应用第1期发表了个人学术论文,打卡记录一下。摘要: 深入分析了当前倒车影像系统在实际使用场景上的不足,介绍了雷达存在的辐射面有限、角度盲区、物体识别方面的缺陷,以及毫米波雷达的高成本难以普及应用。提出了基于ADAS的汽车倒车防碰撞系统设计,对系统倒车功能做了深入的原理分析,针对基于倒车摄像头图像分析的ADAS算法详细介绍了其技术关键点和基于倒车场景融合特征的创新应用,算法识别效果精准有效。针对不同车辆摄像头安装位置和朝向的差异创新设计了灵活的预警和报警区域的调节功能,结合TTS语音
2021-01-28 10:36:12 460 1
原创 基于android系统DVR稳定性问题分析及对策
基于android系统DVR稳定性问题分析及对策 DVR,全名Digital Video Recorder,数字视频录像机,在车载行业大家通俗的叫行车记录仪,因为这个数字视频的内容是行车的形式动态。如今,在道德滑坡的社会不良风气的影响下,出现了诸多的碰瓷党,因此行车记录仪就成了车主的保护神,有了视频录像作为证据,交警来了自己心里都更有底气。但是如何把这个功能做得稳定可靠呢? ...
2018-05-05 17:15:00 2500 5
原创 关于软件研发的一些体会总结
关于软件研发的一些体会总结 都说码农是个苦逼的群体,果真如此?的确,程序员在我的印象中没有多少人能够是正常下班的,大多是需要加班加点的,有些行业的程序员高峰期需要通宵达旦来保障产品的上线,不少程序员在休息日还需要过来加班工作,不得已把家庭丢下奋战在代码的战壕里,真的我们需要理解支持程序员,程序员家属通常需要做出很多牺牲,特别是照顾小孩、老人、整个家庭。但是,这样的路要一直下去...
2017-03-21 11:33:01 6518 28
原创 color key在倒车显示功能上的至关重要性
color key在倒车显示功能上的至关重要性 随着经济的高速发展,汽车越来越多了,在城市里停车位越来越难找,停车位也越来越小,这时候倒车技术就显得非常重要了,左边是宝马,右边是奥迪,车位后面还可能有行人走的场景那就太可怕了,哪个都惹不起啊,这种情况下是不是有一个倒车影像是不是更好呢,答案当然是肯定的,可以看得更清楚,辅助倒车更安全,现在这个功能在小汽车上至少在半数以上都装了吧! 倒
2016-03-10 23:07:03 5373 1
原创 从零开始怎么写android native service?
从零开始怎么写android native service Android service对于从事android开发的人都不是一个陌生的东西,很多人可能会觉得服务很简单。服务是简单,因为复杂的别人做了,所以才会觉得简单。我们先梳理一下服务的分类,首先有本地服务跟系统服务的区分,而在APP里写的服务大多就成为Java服务或者应用服务。/*************************
2016-02-19 21:05:20 4352 1
转载 2023年深圳市城镇单位就业人员年平均工资数据公报
(2)工资总额:根据《关于工资总额组成的规定》(详见官http://www.stats.gov.cn/xxgk/zcfggz/tjxzfg2020/201708/t20170803_1758101.html), 工资总额是指本单位在报告期内(季度或年度)直接支付给本单位就业人员的劳动报酬总额。城镇地区非私营法人单位(包括统计上认定的视同法人单位的产业活动单位)具体包括:除私营单位以外的内资(包括机关、事业)单位、港澳台投资和外商投资企业。(1)单位就业人员:指在本单位工作,并由本单位支付劳动报酬的人员。
2024-07-02 20:45:24 106
原创 升级uboot时如何自动更新环境变量?
通过load mmc里面的一个特殊名字的文件,如果能加载,说明存在这个文件,就只想then后面的语句,也就是升级uboot业务,当然也可以定义成其他功能,否则就不执行动作,提示没有这个特殊文件即可。如果有need_update_env这个环境变量,就比较一下内容,如果是yes就表示需要更新环境变量,如果没有这个环境变量,说明是老的uboot,也需要强制更新一下uboot的环境变量;第二步:在update_uboot的执行语句的时候,更新一个环境变量,第三步:在uboot启动过程中,检测这个特殊的环境变量;
2024-03-03 17:02:05 516
原创 同一台电脑访问gitee多个仓库代码
注意,我们发现Host是不大一样的,因为gitA和gitB的HostName是一样的,没法区别了,只有通过一个Host的别名来区分一下该使用哪对密钥。那么gitB的下载地址本身是:git@gitee.com:ds/gitB.git,你发现通过这个地址没法下载,就算以前下载了也sync不来代码;我们可以发现其实gitA,gitB的HostName都是一样的,同一个平台的,gitee.com的。地址变更一下:git@tsgitee.com:ds/gitB.git,这样子一改变,发现下载代码好使了,
2023-11-20 20:50:58 381
原创 基于libcurl+libopenssl开源库编译出curl下载工具及代码集成curl功能
由于使用的是32bit的编译器,因此makefile里面产生的-m64需要去掉一下,等待编译完成后再安装,执行make install;指定好openssl的头文件,库路径,编译器CC的全路径,CXX也配置上,其他就是一些小配置,--prefix是库文件和可执行文件输出的地方;CC就是编译器的路径, --prefix就是编译出的库文件及可执行文件存放的位置;配置好,执行make,再执行make install,等待完成即可;如果需要编程的来写下载程序的,可以调用curl的接口。:编译openssl。
2023-11-18 20:35:58 490
原创 内存CACHE同步引起OSD时间戳显示异常
实验的时候,我们把做翻转的动作给取消了,相当于不翻转,图像只是倒立而已,但是做翻转的接口又是调用的OPENCV的接口,这种接口也不大可能出问题,再说它能完成一次就有理由说明人家这个翻转接口功能没问题,这种是纯软件的接口,经久耐用的接口我们应该还是信任的,那就剩OSD画布的内存同步了,怀疑是内存同步的问题。马上做了一个实验,改完非CACHED的,我们怀疑是在OSD重新排序的时候,把OSD画布内容做翻转不成功,因此做了一个实验,就是只设置一次OSD,后期时间戳不刷新,显示是正常的,只不过是倒立的,
2023-10-24 18:17:40 480
原创 打印编译程序固件的环境信息
SVN的提交号,当然利用shell命令可以完成很多丰富信息的组合和叠加,拼接完信息后,只需要通过echo到一个指定的文件就可以,在程序启动的地方来引用这个动态生成的编译信息。方法都不难,有一些这样的编译信息,会给我们一个清晰的信息指引,对定位问题和不弄错软件版本都有好处。有些公司还会把编译时的代码提交点给打印出来,比如git的最新一个commit ID,软件运行的时候就会先打印编译日期,再打印时间点,这种比较简单易用;通过定义一个头文件的宏来表示着编译相关的信息集合;
2023-10-15 16:10:43 291
原创 【第200篇原创文章】解决低于1%概率出现的芯片VPSS模块跑飞的问题
出问题的时候大致是这种情况,先执行到了删除,就拿到这把锁了,还没删除完之前,update canvas就调用了,这时候handle这些是有效的,就跑到了等锁这里,等删除完成归还锁了后,update就呼噜呼噜的跑下去了。这是明显有漏洞的,调过了handle的有效性检查。切换视频分辨率的时候,叠加在视频上的OSD也会做相应调整,比如300w的视频用个的LOGO图片跟720P视频用的图片大小肯定是不一样的,显示的时间戳这些字号的大小要跟视频成一定比例,不然看起来就不协调了,因此就会有osd删除和再叠加的过程。
2023-09-16 12:21:21 480
原创 利用procrank再结合业务代码缩小范围压力测试解决内存泄露问题
从两次procrank执行之间,我们只是操作了切换视频的分辨率,切换分辨率的时候,我们图像上的OSD大小和位置都要做适当的调整,比如1080P上的osd肯定不大适合720P,都得重新适配一下,所以就有个退出和重新加载的过程。内存泄露问题很讨厌的,谁都不喜欢。遇到问题不要慌,先理清一下思路,结合工具,结合自动化测试去跑,找规律,找出暗藏的蛛丝马迹,加油!通过分析打印,我们看循环执行的次数,我们发现有一个规律,大概执行100次,大概少了3M样子,发现这个规律,就绞尽脑汁的想,哪个有可能少这么多。
2023-09-15 20:24:48 209
原创 基于NAND存储的双分区OTA升级方案
关键在于有标记的新分区尝试启动,并且在uboot里能自动减一,如果升级是成功的,运行应用后,应用会检测这个标记,发现有这个标记就会复位,正式切换升级分区。1.10 【启动到应用程序里时同样会检测这个标记,发现是尝试启动标记后,1.9 重启到uboot的时候,先读标记,从标记的新分区尝试启动;1.6 分析两个文件的md5值,不一致就重新刷升级包,最多十次;1.8 标记写完,后退出程序,先sync,后重启机器;主动清除尝试启动标记,更换正常启动标记;在root分区重建升级完成标记文件;
2023-09-10 15:58:11 471
原创 利用procrank和lsof定位出客户软件内存OOM的问题
在我们释放SDK出来的时候也会有固件测试整体功能的,客户修改了自己的东西后,开发的程序跑起来十来分钟就oom了.我方leader跟客户对接呢又不那么自信似的,客户在群里反复抱怨程序有内存泄露. 我们在公司内也组织了再次内测,跑两天都没有任何内存泄露,因此我们建议客户在我们SDK的基础上,做增量的问题定位,把修改过的代码一点点加到原始SDK上去定位. 你猜现在客户都多牛逼,人家不干,拍着胸脯说我们改过的代码100%没有内存泄露,我们没有申请内存,客户反正就是不想去回退代码定位.猛的一回头,可疑分子来了,
2023-09-09 19:09:37 323
原创 嵌入式开发常用的几招调试方法
以上几个方法可以同时上,都是比较常用惯用的手段,调试手段越丰富,调试效率也就会越高。特别是遇到一些不容易出现的现象,又不能临时把自己调试想法运行出来,就可以采用前面说的办法,先把想法埋到流程中去,有需要的时候打开一下就行了,这样既能保障系统平时的执行效率不受影响,也能在关键时刻挺身而出,为你披荆斩刺!需要执行调试代码的时候,在SD卡创建一个临时文件,系统access判定文件是否存在,存在了就进去执行,为了减少次数,在执行完调试动作后就直接删除了这个临时文件,防止重入,减少系统负担。废话不多说,直接上方法。
2023-06-03 15:31:51 1376
原创 git分支上的tag
在发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。在回退版本的时候,相当有用!那怎么用呢? 一、在分支上线打tag 1. 在最新代码上打tag; 这种情况最简单,就是在pull下来最新的代码基础上打一下tag,无需指定commit id,系统会默认最新的这个commit id。打tag需要取一个tag的名字,还得同步写一个tag的message,也就
2022-12-04 11:57:38 5279 1
原创 嵌入式图像上实现软件画线
那么久需要从在图像上直接画出来,也就是改变一下图像上的像素点的值,组成我们需要的线条的表现形式。我们知道YUV420SP的图像有两个plane,Y在一个plane上,uv在另外一个plane上,比起uv的plane大小只有Y的一半大小,那么我们在要替换相应像素点的yuv值得时候就可以找到对应的Y和UV的值。从替换点的yuv值我们可以看出,ImgH,ImgW是图像的宽高, PntY,PntX就是具体像素点位置,要有一个颜色的对应值,支持的颜色多了,我们弄一个颜色对照表,把主要颜色支持上就行了。
2022-10-28 21:00:39 748
原创 动态数组用一级指针还是二级指针?
在使用中,每次添加的任务数又是不大一样的,那么我们怎么存储好任务数据呢?一级指针好处,你要存储多少个成员就申请多少个NODE空间,后面再要添加的时候,就采用remalloc的方式来解决。我的建议,在买个NODE内存单元不大的情况下,采用一级指针更好一些。弊端操作麻烦,查找效率不高,要先申请存放指针的空间,然后再去申请NODE的空间,相对麻烦一些。弊端需要连续的空间,如果需要大块大块的,可能有remalloc失败的风险。二级指针好处可以利用一些零碎一点的空间,不需要很大的一块连续空间;...
2022-07-20 20:55:44 256
原创 GPU工作任务存储内存快动态调整兼顾效率
VGS 是视频图形子系统,全称为 Video Graphics Sub-System。支持对一幅输入图像进行处理,如进行缩放、像素格式转换、视频存储格式转换、压缩/解压、打 COVER、打 OSD、画线、旋转、动态范围转换等处理。通常都是GPU来干的,以GPU要干一下用户指定的任务时是一批任务,每次需要完成的任务量又是不固定的,比如拿GPU来给一张输入图片做旋转、裁剪、拉伸、镜像、上下翻折、贴个LOGO、盖个色块、等操作,需要用一个内存块来记录一下这些任务。 对GPU来说,每一个操作都是一个ta
2022-06-25 16:03:41 416
原创 指针地址和结构体中的数组
看看指针和结构体中的数组怎么用的,很基础的,搞清楚一点好。#include <stdio.h>#include <stdlib.h>#include <stdint.h>#include <stdbool.h>#include <stddef.h>#include <unistd.h>#include <fcntl.h>#include <string.h>#include <ctyp
2022-05-24 20:57:56 238
原创 获取BMP图像的信息简易例子
文件头typedef struct tag_OSD_BITMAPFILEHEADER{ HI_U32 bfSize; HI_U16 bfReserved1; HI_U16 bfReserved2; HI_U32 bfOffBits;} OSD_BITMAPFILEHEADER;typedef struct tag_OSD_BITMAPINFO{ OSD_BITMAPINFOHEADER bmiHeader; OSD_
2022-05-21 15:04:41 465
原创 checkpatch海思SDK代码遇见的常见错误《二》
17) ERROR:OPEN_BRACE: open brace '{' following enum go on the same line左大括号要跟enum同一行。18)WARNING:LONG_LINE: line over 120 characters这个最简单了,就是超出了最大长度120个字符,但是有时候需要注意,TAB键输入比较多的情况下,即使最后一个字符的COL没有到120,也会报,因为TAB占的多,有些是8个字符宽度。19)WARNING:USE_FUNC: __f
2022-05-20 21:03:52 910
原创 checkpatch海思SDK代码遇见的常见错误《一》
01)WARNING:AVOID_EXTERNS: externs should be avoided in .c files#3: FILE: sample/region/sample_region.c:3:+extern "C" {-#ifdef __cplusplus-#if __cplusplus-extern "C" {-#endif-#endif /* End of #ifdef __cplusplus */-02)ERROR:POINTER_LOCATION: .
2022-05-19 20:53:24 4403
原创 代码质量管理工具--checkpatch
代码质量,关乎软件的稳定性和生命力,能不能给客户提供持续优良的服务!说起来,大家都在做软件开发,代码质量在大多数公司都还是一个口头强调,实际放开的一个状态。有时候,我也给团队培训代码质量规范,这样写,那样写,会上大家感觉也很有用,会后持续的效果又不大好,那时候还比较勤奋,经常去review同事们提交的代码,我们在项目会议上也拿出来分析,哪里写得不错,哪里那样写不规范,时间长了大家的水平就提高了一些,但是后面新来的同事因为没有经历过这样的一个阶段,往往写的代码达不到要求,项目急得时候就直接pus...
2022-05-18 16:34:18 1838
原创 LINUX bash shell脚本常用的选择功能
一、选择语句case in选择语句功能常用的有if-else, case in。 case $target in uboot) cleanUboot ;; kernel) cleanKernel ;; libs) buildLibs clean ;; "") ...
2022-05-17 20:42:38 736
原创 海思平台osdrv 顶层 Makefile 使用说明
本目录下的编译脚本支持 arm-himix200-linux,arm-himix200-linux工具链对应glibc库。具体命令如下(以hi3516dv300举例)注意: 由于开源工具整改,部分开源工具不再提供源码包,客户编译OSDRV时需要自行下载: a:linux-4.9.37.tar.gz (https://www.kernel.org/pub/) 将下载的 linux-4.9.37.tar.gz 存放到 osdrv的opensource/kernel目录中...
2022-05-08 20:40:14 799
原创 学习海思Hi3516的调试方法【远程登陆和推送程序】
Hi3516开发板已经支持了telnet和tftp协议,在调试中可以远程支持登陆调试,推送调试程序;1.远程登陆开发板,需要支持telnet协议;可以使用支持telnet的桌面工具,比如mobaxterm,手上的开发板IP地址:192.168.1.32, 配置如下:2. 推送调试程序到开发板,使用tftp协议;可以使用tftpd32这个工具,比较好用,配置简单,使用方便,PC的IP【192.168.1.26】...
2022-05-08 16:21:10 1002
原创 C语言常见问题(11):a label can only be part of a statement and a declaration is not a statement
a label can only be part of a statement and a declaration is not a statement 【 标签只能是语句的一部分,而声明不是语句】 由于switch的几个case语句在同一个作用域(因为case 语句只是标签,它们共属于一个swtich语句块),所以如果在某个case下面声明变量的话,对象的作用域是在俩个花括号之间 也就是整个switch语句,其他的case语句也能看到,这样的话就可能导致错误。我们可以通过在case后面的语...
2022-04-06 21:08:17 2983
原创 管理者的角色自查
管理者的工作重点:抓项目,带队伍,管业务。初级管理者:项目管理者,团队建设者,业务管理者。项目管理者:计划管理,质量管理,周边协调,风险管理。团队建设者:绩效管理,组织氛围建设,员工培养,员工激励。业务管理者:基层业务管理,团队业务指导,业务能力积累。从骨干到管理者:工作观念,能力要求,时间应用。干部成长:阶段一:带团队,定目标,打胜仗,践行文化阶段二:业务规划,流程建设,资源能力,团队激励阶段五:引领导向,战略规划,激发团队,领导变革管理者能力要求:绩效管理,团队建设,有效沟通,项目
2022-03-05 21:14:39 216
原创 C语言常见问题(10):Sections of code should not be commented out
注释掉的代码及时清理掉,让函数的body干净清洁,不要杂草丛生!
2022-02-22 21:58:44 1926
原创 C语言常见问题(9):Value stored to ret is never read
意思就是有些变量中间的赋值没有使用到,相当于是个无效的处理,在程序设计中我们要尽力避免这样的无用功。
2022-02-22 21:48:16 1557
原创 C语言常见问题(8):Refactor this function to reduce its Cognitive Complexity from 43 to the 25 allowed
函数写得越复杂越绕,它的复杂度就越高,表面上看起来技术含量很高,在实际开发中经常会导致代码可读性差,别人来接手或学习这一块代码的时候头容易痛。身为程序员,都不大喜欢去接手别人的代码,为啥?因为怕代码写得太烂,伤脑筋。如果程序写得条理清晰,可读性好,代码风格又整齐划一,看起来就很美,阅读起来就没那么费劲,也就不会那样在心里埋怨这个代码的创造者。言归正传,代码复杂度通常来说尽力不要超出25,也就是说分支太多,条件太多会导致程序读起来费劲,如果函数实在比较复杂,就把能抽象的封装成子函数,降低函数内部的复杂度很..
2022-02-22 21:45:20 1926
原创 不到百行Demo看清MQTT收发处理逻辑
这是比较简洁的mqtt处理的demo,核心处理收的就是一个回调函数messageArrived,发送和接收是不同topic的,发送其实核心就一个MQTTPublish,但是外围组织数据的逻辑靠自己业务特色来弄了,这个例子基本能搞明白MQTT咋整起来,收到数据的解析和发送数据的组织都是可以在这个基础上展开,相对没那么难搞了。
2022-02-08 11:43:37 876
原创 C语言常见问题(7):Remove this redundant cast
简单说就是做了无用功,类型强制转换的类型跟声明的类型是一样的,加上了这个强制转换其实就是脱了裤子放屁。
2022-02-07 17:17:03 1197
原创 嵌入式MQTT连接主要流程
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。 初始化mqtt流程:然后判断网络连接情况,确保网络是连接的;然后启动mqtt connect,配置好协议版本,username, password,clientid连接成...
2022-02-07 17:11:21 4802
原创 C语言常见问题(6):declaration shadows a local variable
粘贴复制用多了,连声明都一起copy过来了,造成了一个函数里面不同作用域里声明了同名变量,其实他们是可以共用的,这是个不好的习惯,需要防微杜渐,有时候不好查的bug的bug都是在这种熟悉得不能再熟悉的地方。...
2022-01-26 20:37:29 4272
原创 C语言常见问题(5):enum members other than the first one should not be explicitly initialized unless all mem
就是枚举里面的元素不是连续的,要不就只有一个赋初值的,要么就所以元素都单独赋值。这种问题我们在写代码的时候经常出现,但是确实不是那么规范,引以为戒。
2022-01-26 20:34:33 634
一种电子流媒体后视镜方案关键技术及实现论文
2020-10-14
车载视频行驶记录系统(征求意见稿).pdf
2019-08-20
Linux/uClinux + MiniGUI: 嵌入式系统开发原理、工具及过程
2008-04-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人