Linux
文章平均质量分 56
coding码场
毕业十几年都是从事嵌入式系统开发,熟悉Linux、freeRTOS、Android,参与了HDTV、智能手机平板电脑、车载导航、扫地机方面的开发工作,主要负责系统、驱动方面的工作,应用系统也做过一些,做过高工、架构师、带过团队,先后发表过多篇学术论文,已通过软考项目管理师,熟悉IATF16949,CMMI,市工信局项目评审和验收专家。目前在芯片原厂从事嵌入式系统开发。
展开
-
基于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 · 493 阅读 · 0 评论 -
内存CACHE同步引起OSD时间戳显示异常
实验的时候,我们把做翻转的动作给取消了,相当于不翻转,图像只是倒立而已,但是做翻转的接口又是调用的OPENCV的接口,这种接口也不大可能出问题,再说它能完成一次就有理由说明人家这个翻转接口功能没问题,这种是纯软件的接口,经久耐用的接口我们应该还是信任的,那就剩OSD画布的内存同步了,怀疑是内存同步的问题。马上做了一个实验,改完非CACHED的,我们怀疑是在OSD重新排序的时候,把OSD画布内容做翻转不成功,因此做了一个实验,就是只设置一次OSD,后期时间戳不刷新,显示是正常的,只不过是倒立的,原创 2023-10-24 18:17:40 · 481 阅读 · 0 评论 -
打印编译程序固件的环境信息
SVN的提交号,当然利用shell命令可以完成很多丰富信息的组合和叠加,拼接完信息后,只需要通过echo到一个指定的文件就可以,在程序启动的地方来引用这个动态生成的编译信息。方法都不难,有一些这样的编译信息,会给我们一个清晰的信息指引,对定位问题和不弄错软件版本都有好处。有些公司还会把编译时的代码提交点给打印出来,比如git的最新一个commit ID,软件运行的时候就会先打印编译日期,再打印时间点,这种比较简单易用;通过定义一个头文件的宏来表示着编译相关的信息集合;原创 2023-10-15 16:10:43 · 294 阅读 · 0 评论 -
利用procrank和lsof定位出客户软件内存OOM的问题
在我们释放SDK出来的时候也会有固件测试整体功能的,客户修改了自己的东西后,开发的程序跑起来十来分钟就oom了.我方leader跟客户对接呢又不那么自信似的,客户在群里反复抱怨程序有内存泄露. 我们在公司内也组织了再次内测,跑两天都没有任何内存泄露,因此我们建议客户在我们SDK的基础上,做增量的问题定位,把修改过的代码一点点加到原始SDK上去定位. 你猜现在客户都多牛逼,人家不干,拍着胸脯说我们改过的代码100%没有内存泄露,我们没有申请内存,客户反正就是不想去回退代码定位.猛的一回头,可疑分子来了,原创 2023-09-09 19:09:37 · 323 阅读 · 0 评论 -
嵌入式开发常用的几招调试方法
以上几个方法可以同时上,都是比较常用惯用的手段,调试手段越丰富,调试效率也就会越高。特别是遇到一些不容易出现的现象,又不能临时把自己调试想法运行出来,就可以采用前面说的办法,先把想法埋到流程中去,有需要的时候打开一下就行了,这样既能保障系统平时的执行效率不受影响,也能在关键时刻挺身而出,为你披荆斩刺!需要执行调试代码的时候,在SD卡创建一个临时文件,系统access判定文件是否存在,存在了就进去执行,为了减少次数,在执行完调试动作后就直接删除了这个临时文件,防止重入,减少系统负担。废话不多说,直接上方法。原创 2023-06-03 15:31:51 · 1387 阅读 · 0 评论 -
嵌入式图像上实现软件画线
那么久需要从在图像上直接画出来,也就是改变一下图像上的像素点的值,组成我们需要的线条的表现形式。我们知道YUV420SP的图像有两个plane,Y在一个plane上,uv在另外一个plane上,比起uv的plane大小只有Y的一半大小,那么我们在要替换相应像素点的yuv值得时候就可以找到对应的Y和UV的值。从替换点的yuv值我们可以看出,ImgH,ImgW是图像的宽高, PntY,PntX就是具体像素点位置,要有一个颜色的对应值,支持的颜色多了,我们弄一个颜色对照表,把主要颜色支持上就行了。原创 2022-10-28 21:00:39 · 754 阅读 · 0 评论 -
GPU工作任务存储内存快动态调整兼顾效率
VGS 是视频图形子系统,全称为 Video Graphics Sub-System。支持对一幅输入图像进行处理,如进行缩放、像素格式转换、视频存储格式转换、压缩/解压、打 COVER、打 OSD、画线、旋转、动态范围转换等处理。通常都是GPU来干的,以GPU要干一下用户指定的任务时是一批任务,每次需要完成的任务量又是不固定的,比如拿GPU来给一张输入图片做旋转、裁剪、拉伸、镜像、上下翻折、贴个LOGO、盖个色块、等操作,需要用一个内存块来记录一下这些任务。 对GPU来说,每一个操作都是一个ta原创 2022-06-25 16:03:41 · 417 阅读 · 0 评论 -
指针地址和结构体中的数组
看看指针和结构体中的数组怎么用的,很基础的,搞清楚一点好。#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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
代码质量管理工具--checkpatch
代码质量,关乎软件的稳定性和生命力,能不能给客户提供持续优良的服务!说起来,大家都在做软件开发,代码质量在大多数公司都还是一个口头强调,实际放开的一个状态。有时候,我也给团队培训代码质量规范,这样写,那样写,会上大家感觉也很有用,会后持续的效果又不大好,那时候还比较勤奋,经常去review同事们提交的代码,我们在项目会议上也拿出来分析,哪里写得不错,哪里那样写不规范,时间长了大家的水平就提高了一些,但是后面新来的同事因为没有经历过这样的一个阶段,往往写的代码达不到要求,项目急得时候就直接pus...原创 2022-05-18 16:34:18 · 1839 阅读 · 0 评论 -
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 阅读 · 0 评论 -
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 · 2996 阅读 · 0 评论 -
C语言常见问题(2):Remove this conditional structure or edit its code blocks so that they‘re not all the sam
写if else的时候,卡条件卡得离散了一点,本身可以合成一个的,结果写成了多级if,增加了程序的复杂度。原创 2022-01-05 10:11:28 · 2729 阅读 · 0 评论 -
C语言常见问题(1):Called function pointer is null (null dereference)
Called function pointer is null (null dereference)翻译过来就是调用的函数指针为空。使用Sonar工具检测,在使用这种函数指针的时候没有先判断该函数指针是否为空,存在安全隐患,一旦为空,不就崩溃了嘛!因此,一种变通的方法就是把这个函数指针的调用封装到一个函数里面去,增加判断是否为空的检测,保障安全。后续将继续举例讲讲常见的问题。...原创 2022-01-04 21:55:51 · 1165 阅读 · 0 评论 -
嵌入式内存泄漏造成死机的问题如何管控
那怎么提高这种代码的管理质量呢?1、有一个好的,达成共识的编码规范;2、增加人工review代码的流程,了解设计者的逻辑;3、测试用力覆盖面增加,尽量不留死角;4、加强培训,提高编码能力,降低埋bug可能性;5、引入自动化工具,比如sonar,功能强大,真的挺不错的。原创 2021-12-04 17:44:14 · 969 阅读 · 0 评论 -
64位Ubuntu系统下测试网络IP出错
#include <stdio.h>#include <netdb.h>#include <sys/socket.h>#include <arpa/inet.h> //64bit ubuntu system ,need this head file int main( int argc, char ** argv) { char * ptr, ** pptr; struct hostent .原创 2021-11-05 21:08:57 · 295 阅读 · 0 评论 -
嵌入式常见的段错误死机原因之一strlen函数
在做嵌入式产品常见死机原因有很多种,其中之一就是strlen函数引起的。这个函数大家不会陌生,学c语言最基本的函数了,但在实际使用中偶尔不小心还是可能会引起段错误造成死机的。为什么呢? 函数原型:unsignedintstrlen(char*s);也就是输入一个字符串函数指针,判断这个字符串有多长。当你不小心输入了一个空指针的时候,错误就来了。很多时候我们都知道使用指针之前都判断一下这个指针是否是空指针,在开发中往往有时图省事或者自认为这里不判断也不会有事,盲目自信了一...原创 2021-10-10 16:45:27 · 1674 阅读 · 0 评论 -
经常会用到的时间戳
时间戳在实际开发中经常用到,比如同步时间,网络传输,RTC时钟都用到。在不同开发语言里有不同的获取方法:1、shell里: date +%s2、java(int) (System.currentTimeMillis() / 1000)3、Linux C/C++ intgettimeofday(struct timeval*restrict tp,void*restrict tzp);4、python import time time...原创 2021-08-22 15:55:32 · 314 阅读 · 0 评论 -
nanomsg
nanomsg是一个socket library,它提供了几种常见的通信模式,为了能使网络层快速、可扩展并且能易于使用。用C实现,且适用于广泛的操作系统,几乎不需要依赖。这里的通信模式(也称为“可扩展性协议”)是构建分布式系统的基本框架。通过组合它们,可以创建广泛的分布式应用程序。接收:#include <stdio.h>#include<stdlib.h>#include<string.h>#include <assert.h>#inclu原创 2021-07-29 16:56:08 · 1257 阅读 · 0 评论 -
Input子系统上报按键--模板,让开发更简易
按键多是采用GPIO检测的,有用GPIO电平触发的,也有用边沿触发的,这都只是中断的触发方式不一样,为了保证采集的可靠性,可以采用延时处理,比如触发中断了后30ms以后我再读一下这个GPIO的值是不是还是跟预期一样的,如果不一样,可能就要丢弃这次的IRQ处理。在延迟处理线程里面要获取按键的值,按照定义对照,上报到系统上去,通过input_report_key(),前面当然需要一个input设备,采用input_register_device(),如何注册IRQ处理。 整个...原创 2021-07-13 12:01:33 · 396 阅读 · 0 评论 -
Linux字符型设备驱动模板,简化开发工作
写linux驱动,无法也就那么几类,字符型,块设备型,网络设备型,管道流型等,为了便捷开发,平时积累一些模块确实大有裨益!首先可以先把程序框架给跑起来了,如何就是想办法往里面添东西,这样慢慢做加法,总比一股脑的写出来再慢慢调试编译错误做减法来得实际一些。 下面就写一个常见的字符型设备驱动,套用一下模板,事半功倍,效率喜人。#include <linux/init.h>#include <linux/module.h>#include <l...原创 2021-07-10 11:30:10 · 186 阅读 · 0 评论