- 博客(156)
- 资源 (2)
- 收藏
- 关注
原创 二维数组旋转的方法
目标:有一个N*N的二维数组,需要将将这个二维数组旋转90度。效果如下图思路一:生成一个新的二维数组,然后逐个元素填写数据。最后再覆盖掉原数组。根据上图,很容易得出坐标关系:通过逐位遍历,即可完成。#python3def unit_rotate_1(block_unit): list_len = len(block_unit) #复制一下二维数组 tmp_unit = [[block_unit[j][i] for i in range(list.
2021-04-08 17:02:05 9295
原创 程序单例运行--文件锁
遇到的问题在运行程序时,为了防止可执行程序被多次运行,导致运行异常,需要想办法使得程序单例运行。即一个可执行程序,只有实例处于运行状态。实现方法首先,出发点是进程间的排他性,对多个进程可共享的资源加排他性的锁。凡是进程间可共享的资源理论上都可以作为载体。例如:设置共享内存中的信号量 设置文件锁 某个文件中的具体内容同一个可执行程序,如果启动两次,两次中访问的锁肯定是同一个锁,所以使用排他性的锁,在第二个实例启动过程中,获取这个锁时就会报错。就起到了单例保护的作用。附一个简单的文件锁
2021-03-16 19:48:55 424
原创 守护进程
守护进程是什么守护进程是一类运行在系统后台,不受任何终端、上下文影响的特殊后台进程。从运行开始,直到系统关闭时才会结束。通常写一个服务程序,或者程序从设备开机起到设备关机一直都在运行,就适合做成守护进程形式。为什么要守护进程简单来说,就是为了使程序运行起来后,不受一些外部因素的干扰而异常退出。linux系统运行起来后,pid为1的进程是init进程,负责启动linux系统,其他的进程都是在他创建出来的。我们在某个终端上通过命令./a.out的形式来运行一个程序,这种终端程序就是我们所运行
2021-03-16 16:45:31 220
原创 python3 小整理
Q&AQ:如何对文件进行二进制读写?A:在打开文件时,参数带”b", 比如"rb", "wb"。使用read函数读取,如果不带参数,则读取整个文件(最大可以一次读取2G左右,所以一般文件应该没问题)。带长度参数,就是读取指定长度的数据。 在读写时可以通过struct模块来读写结构化的数据,使用pack和unpack方法。比如 fd.write(struct.pack("bbi", 10, 10, 10).这样相当于写入了下面结构体的数据。struct { char...
2021-03-04 20:48:37 151 1
原创 Window下Qt环境搭建
软件下载下载地址:http://download.qt.io/archive/qt/安装此处不想登录的话直接点击skip(5.10以上的版本在这个页面里面没有"skip",必须登录) 选择安装路径 选择安装组件其中Qt选项下MinGW 5.3.0 32 bit:表示Qt组件编译工具,这个必须要选其中一个。Sources: Qt源码,想深入学习,可以选择安装Tool选项下:QtCreator 4.5.0: 默认安装的IDE工具MinGW 5.3.0:编译工具.
2020-12-08 13:53:47 466
原创 ffmpeg支持MP3编码的方法
问题近期一个项目中mp3文件较大,需要转成占用存储空间较小的文件。首先想到的是“格式工厂”,非常便捷,但是此工具每次批量转换数量上限是1000,而我要转上万个。所以考虑用ffmpeg。但在转换时报错,按照提示信息来看,应该是没有选择编码工具。也就是说ffmpeg工具安装时有些功能没选上。解决办法在ffmpeg安装包目录下 ,通过./configure --list-encoders 和./configure --list-decoders命令可以看到,ffmpeg只支持mp3解码,但..
2020-12-07 13:57:19 3832
原创 C语言--奇怪错误整理
leetcode报错之:member access within misaligned address 在leetcode上做一个道体,报错如下:Line 70: Char 15: runtime error: member access within misaligned address 0xbebebebebebebebe for type 'struct ListNode', which requires 8 byte alignment (ListNode.c)0xbebebebeb..
2020-10-28 11:06:11 2052
原创 sqlite3数据库操作
API接口介绍增删改查查询接口SQLITE_API int sqlite3_get_table( sqlite3 *db, /* An open database, 数据库句柄 */ const char *zSql, /* SQL to be evaluated, sql语句 */ char ***pazResult, /* Results of the query, 结果指针(需要调用sqlite3_free_table释放) */
2020-09-24 13:58:51 152
原创 Valgrind使用记录
下载地址:https://www.valgrind.org/downloads/current.html编译安装x86平台:./configure --prefix=<安装目录> ,make ,make installarm平台:./configure --prefix=<安装目录> CC=<工具链> AR=<工具链> --host=<运行平台>, make make install在x86平台编译时遇到问题:解决方法:进入
2020-09-14 16:39:22 549
原创 解决 Linux系统上编译时出现:asm/types.h: No such file or directory
在linxu系统上编译valgrind工具时,报错:实际去/usr/include目录下看,发现没有asr这个目录,而有一个asm-generic目录。手动创建软链接asm,重新编译即可。
2020-09-11 17:02:55 23288 8
原创 Qt笔记-添加资源文件
Qt使用过程中需要添加资源文件,比如图片、动画等。创建资源池文件在工程目录上单击右键-->添加新文件,在弹窗中“文件和类”选择Qt,然后选择Qt resource file。此时需要输入资源文件的名称。其实这里可以把他理解为一个资源池的名字,在创建的这个资源文件中可以包含多个具体的文件。点击完成后,工程里会添加一个“Resources目录”,并且下面会有生成的资源池文件gif.qrc.注意:添加的资源文件必须在资源池文件同级目录或者子目录下。添加资源文件在生成的资源池文件
2020-08-26 20:17:46 578
原创 Qt笔-helloworld程序
开发环境:Win10 + Qt5.10.0 + QtCreater4.5.0略过软件安装过程,直接从第一个程序helloworld开始。和MFC相似,在QtCreater中直接新建项目(Application)--->选择新建项目的类型(Qt Widgets Application)--->项目名称及存储位置--->选择工具集--->定义类名--->完成。此时,可以在左边栏编辑模式下展示的是项目的所有文件创建完成后,直接点击运行按钮(Ctrl+R)。可以看到
2020-08-20 23:11:48 320
原创 记录一个因头文件引发的错误
项目中有一个接口是在外部实现,大致调用结构如下图四个文件。share.h中的结构体中有一个成员,其结构在另外一个头文件中定义。main函数中调用share.c中实现的接口,获取到struct student类型的成员,只要一访问结构体中的成员就直接报段错误,通过gdb也看不出什么信息。但是如果在share.c中访问,就没有问题。(在x86平台这样写,然后运行,发现没问题)针对这个现象,当时就觉得有点像C++中的成员访问权限引发的问题一样。但是这是C代码,从根本上来说就是访问一段内存而已。
2020-08-20 16:50:30 236
原创 记录一次内存错误排查过程
问题现象一个播放器的实现代码,在多次播放后,出现异常挂死,gdb显示如下图通过bt命令查看函数调用栈,只有一条有效消息,就是 “#3 0xa0” 这个地址明显是错误的。所有怀疑是栈被破坏了。直接报错内容也是多种多样。以下这些错误都出现过。double free or corruption (!prev)corrupted size vs. prev_sizedouble free or corruption (out)malloc(): memory corruption ...
2020-08-14 14:14:22 2392 1
原创 getopt--参数选项处理
在写一些可执行程序时,常常会传递一些参数。getopt函数就是专门用来处理选项参数的。#include <unistd.h>extern char *optarg;extern int optind, opterr, optopt;int getopt(int argc, char * const argv[], const char *optstring);arg...
2019-01-07 16:32:00 2017
原创 使用FileZilla Server软件快速搭建ftp服务器
1. 下载软件: 下载软件,名称为FileZilla Server2. 按照常规套路安装3. 设置1)双击运行,以本机为ftp服务器的话,此界面基本不用修改,passwd可以设置,也可以不用设置。2)添加一个用户,配置ftp根目录可以看到,在General中点击Add用来添加用户,可以配置密码,也可以不配置密码。然后点击Shared folders选项卡,在里面点击Add添加ftp的根目录。...
2018-04-12 17:17:35 1956
原创 查看python库的文档的方法
python强大的一个原因就是有丰富的第三方库可以使用,省去了我们造轮子的精力,将注意力主要放在处理问题上。但是有时想要查看所引用的库都有哪些方法,具体参数该怎么用时,来回百度,却不一定能找到详细的文档。其实python提供了一个查看本地文档的方法。通过python -m pydoc命令来启动一个本地的web服务,然后就可以通过浏览器来查看了。具体操作步骤: 1. 打开cmd,输入pytho...
2018-04-02 23:17:01 15138 1
原创 编译framework模块,虚拟机启动异常问题
在写硬件访问服务程序时,修改了framework层相关模块,重新编译make snod,模拟器启动异常,停留在"android“界面。输出消息部分如下:通过打印消息可以看出应该是模块依赖的问题。上网查询,截取部分解决方法。查看build/core/main.mk,发现里面有个droidcore命令,尝试使用make droidcore编译后,模拟器成功运行,并打印出
2017-10-16 22:52:56 785
转载 linux 下 svn操作
转载自博客:http://blog.csdn.net/chun_1959/article/details/428707571、将文件checkout到本地目录svn checkout path(path是服务器上的目录)例如:svn checkout svn://192.168.1.1/pro/domain简写:svn co2、往版本库中添加新的文件
2017-10-16 17:27:20 1476
转载 JNI学习
转载自唐攀博客:http://blog.csdn.net/mr_raptor/article/details/8080606JNI是在学习Android HAL时必须要面临一个知识点,如果你不了解它的机制,不了解它的使用方式,你会被本地代码绕的晕头转向,JNI作为一个中间语言的翻译官在运行Java代码的Android中有着重要的意义,这儿的内容比较多,也是最基本的,如果想彻底了解JNI
2017-10-15 21:43:25 323
原创 硬件访问服务
前面完成了HAL往下的理解学习,下面就应该是service相关的了。老罗的书上直接就开始带领着写service相关的代码了,但自己还是尚未搞明白。上网了解了一下,没有弄得太明白,(此点暂时留白),暂且先沿着这个路线继续向下吧。service到这里首先是AIDL接口,先对此做一了解。1. 是什么AIDL: Android Interface Definition Language,安卓接口定义语言,是
2017-10-15 16:38:17 431 1
原创 HAL层代码
之前实现好了linux底层的模拟自设备驱动freg和测试程序后,下面开始学习android下的硬件抽象层,hardware层,也叫HAL层。 主要的文件: hardware/libhardware/hardware.c hardware/libhardware/include/hardware/hardware.hAndroid的HAL层是Android系统对底层硬件操作屏蔽的一个中
2017-10-10 23:22:05 1786
原创 linux驱动程序对应的app程序
在编写此app测试程序时,可以通过以前的方式,编写c文件,编写makefile文件,最终编译出可以执行程序。 不过此时可以通过android下的Android.mk来快速编译可执行程序。 例如:LOCAL_PAH :=$(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_MODULE := fregLO
2017-10-09 22:57:41 325
原创 模拟字符设备驱动的实现
目标:通过读写一个整型变量来模拟一个字符设备,实现上层的访问。先回顾一下字符设备的创建方式。 四种注册设备的方式。 a). register_chrdevint register_chrdev(unsigned int major, const char *name, const struct file_operations *fops)一步到位注册设备到内核中。传递主设备号(传0表示动态分
2017-10-08 21:35:58 528
原创 linux驱动--ioctl接口
内核中对底层设备操作完全可以通过read、write接口来实现,在linux 2.2之前都是没有ioctl接口的,2.4以后才引入ioctl接口。 典故(据说),以前在操作软盘时,需要弹出光盘时命令为eject,可以通过write写这个字符串来传输这个指令,但是此时,如果要往软盘中写入”eject”字符串时就出现了歧义的问题。虽然可以通过附加一些代码绕过这个问题,但是不是严谨的开发者的习惯。所以
2017-10-04 22:54:05 1197
原创 ubuntu系统自动执行脚本。
1. 随系统开机启动的脚本。 a). 在/etc/rc.local脚本中加入要执行的脚本。注意要在exit 0 前面。 b). 根据系统启动的运行级别(通过runlevel命令可以查看),在对应的rcX.d目录中创建软连接文件,链接到/etc/init.d/下的某个脚本。注意添加中心权限。 在随系统启动时,默认是以root账户运行的。如果想以其他账户来
2017-09-24 11:54:10 4468
转载 TS流PAT/PMT详解
http://www.cnblogs.com/shakin/p/3714848.html一 从TS流开始 从MPEG-2到DVB,看着看着突然就出现了一大堆表格,什么PAT、PMT、CAT……如此多的表该怎样深入了解呢? 我们知道,数字电视机顶盒接收到的是一段段的码流,我们称之为TS(Transport Stream,传输流),每个TS流
2017-07-15 09:26:30 2038
转载 git diff
下面是一个通常的git diff的输出结果:$ git diff README.mddiff --git a/README.md b/README.mdindex d29ab50..7e42b29 100644--- a/README.md+++ b/README.md@@ -37,3 +37,4 @@ You can get it using command `hostname`
2017-07-11 14:06:47 332
转载 数字电视原理
其实说白了,数字机顶盒就是一种把数字信号转换成模拟信号的变换设备。我们大部分时候会产生这样的疑问,既然从电视台发出的是模拟信号,接收到电视机的也必须是模拟信号,那为什么还要用到数字机顶盒呢?现在生活中,我们总是希望自己的电视机能播放清晰度高的电视节目,从模拟电视向高清晰度数字电视过渡,是一个跨越式的过渡,可以说无法直接兼容,也就是说目前的所有的模拟电视是不能使用的,所以一步到位是不现实的。通常现在
2017-06-28 16:01:54 3653 1
原创 虚拟机登陆桌面失败
1. 问题: 虚拟机登陆桌面时,输入密码后,又回到了登陆界面,密码是正确的。 解决办法:删除掉对应账户下的 ~/.xauthority 文件
2017-06-18 17:41:14 2145
原创 Makefile中添加shell脚本
Makefile中可以加入shell脚本语言,但是编写形式不一样,Makefile中都是以行为单位的,所以必须将Makefile中的shell脚本通过\ 连接成一行。例如:if [ -d $(HISI_HOME)/src/sdk_modify/hidrv_v0A1/source/osdrv/kernel/linux-2.6.35 ]; then \cp -rf $(HISI_HOME)
2017-06-12 10:39:48 3069
原创 同步笔记
1. http://developer.51cto.com/art/201001/180468.htm 2. http://droidyue.com/blog/2015/07/04/six-books-every-programer-must-read/3. 安卓系列博客 http://blog.csdn.net/jscese/article/details/42739197
2017-06-09 13:49:01 501
转载 Makefile中命令前的@和-符号
如果make执行的命令前面加了@字符,则不显示命令本身而只显示它的结果; Android中会定义某个变量等于@,例如 hide:= @通常make执行的命令如果出错(该命令的退出状态非0)就立刻终止,不再执行后续命令,但如果命令前面加了-号,即使这条命令出错,make也会继续执行后续命令。通常rm命令和mkdir命令前面要加-号,因为rm要删除的文件可能不存在,mkdir要创建的目录可能已
2017-06-08 14:04:51 1348
转载 Makefile 中:= ?= += =的区别
在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验新建一个Makefile,内容为:ifdef DEFINE_VRE VRE = “Hello World!”elseendififeq ($(OPT),define) VRE ?= “Hello World! First!”endifif
2017-06-08 09:47:03 236
转载 从一个男人身上看出他的修养和抱负
切实反省自我,认真冷静思考问题。整天关注娱乐版的男人,你指望它有什么成就?整天玩游戏的男人、整体打麻将的男人,你指望它有什么成就么?不管喜不喜欢,这样的东西都是值得一读。一、拥有自信和风度 男人到了二十几岁后,就要开始学着用心去经营自己了,它体现在自己的思想与涵养上。自信是一个男人最重要的品质,自信的男人就你像一只在暴风雨中战斗的海鸥。海鸥所要说的只有一句话“让暴风
2017-06-07 15:35:42 376
原创 vim 快捷操作
1. 在vim中显示文件路径:f 或者Ctrl+g 显示全路径 先按1 ,然后Ctrl+g2. 鼠标可以移动光标 set mouse=a
2017-06-06 17:05:45 262
原创 判断指定格式字符串是否合法
int ereg(char *pattern, char *value) { int r,cflags=0; regmatch_t pm[10]; const size_t nmatch = 10; regex_t reg; r=regcomp(®, pattern, cflags);
2016-11-10 15:10:17 567
转载 UE激活步骤
UltraEdit是一款优秀的文字编辑软件,本篇经验将为大家介绍怎么正确注册UltraEdit。方法/步骤1关闭网络连接(或者直接拔掉网线)。打开UltraEdit软件,稍等片刻会出现提示你你使用的是试用版本的窗口。如下图,点击“注册”。填
2016-10-18 17:03:43 3461
转载 Linux设备模型——设备驱动模型和sysfs文件系统解读
原文地址:http://blog.csdn.net/yj4231/article/details/7799245本文将对Linux系统中的sysfs进行简单的分析,要分析sysfs就必须分析内核的driver-model(驱动模型),两者是紧密联系的。在分析过程中,本文将以platform总线和spi主控制器的platform驱动为例来进行讲解。其实,platform机制是基于driver
2016-10-13 23:18:10 764
使用j-Link Flash下载镜像文件到S3C2440板子上
2016-10-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人