- 博客(21)
- 资源 (4)
- 收藏
- 关注
原创 线程同步之条件变量
相关函数int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);初始化一个条件变量;也可以直接定义的方式初始化:pthread_cond_t cond = PTHREAD_COND_INITIALIZER(只能使用默认参数设定); int pthread_co...
2018-05-14 01:23:47
387
1
原创 linux多线程之posix信号量
信号量理解1.在多任务操作系统中,通常资源都是固定数量可用的,比如打印机这个外设;但是需要使用该资源的任务有很多,这时就可以使用到信号量来协调资源的使用了(当然在资源内部用锁也可以达到同样的效果); 2. 信号量有被操作系统实现为PV操作:P(passeren),消耗资源,对信号量做减一操作;V(vrijgeven),释放资源,对信号量做加一操作;PV操作都是原子操作; 3. 当任务A需要...
2018-05-13 00:00:48
361
原创 设定线程运行栈:pthread_attr_setstack()
概述linux在创建线程时,如果使用默认的栈,默认栈的大小通常为8MB,这对内存比较紧张的嵌入式平台来说,是无法接受的巨量内存浪费;pthread_attr_setstack()可以设定线程栈的地址和大小,设定的栈地址必须以linux页面大小对齐,所以这里使用posix_memalign()分配页面对齐的内存;线程的最小栈大小为16KB,小于这个数值pthread_attr_setsta...
2018-05-10 00:29:48
5490
原创 prctl()设定线程名
基本介绍prctl()原型为int prctl (int __option, …);用于控制主进程或者子进程的属性;本文主要介绍使用PR_SET_NAME 这个flag设定线程的名字,这个在平常调试中很有帮助,比如想知道哪个线程的CPU占用高;需要包含的头文件为 sys/prctl.h;用法:prctl(PR_SET_NAME , (char*)name);其中设定的名字字符串长度不...
2018-05-09 23:41:54
4524
原创 线程同步之互斥锁:pthread_mutex_init,pthread_mutex_lock,pthread_mutex_unlock,pthread_mutex_destroy
主要函数说明int pthread_mutex_init (pthread_mutex_t *__mutex,const pthread_mutexattr_t *__mutexattr)创建一个锁;int pthread_mutex_destroy (pthread_mutex_t *__mutex)销毁锁;int pthread_mutex_trylock (pthread_mute...
2018-05-08 23:57:34
5873
原创 让printf打印更加丰富多彩
基本原理在支持ANSI color控制的终端上,可用通过ANSI控制码改变终端的字符的显示方式;所以我们可以通过printf或者cout输出特定ANSI控制码来让后面的字符串输出改变成想要的显示方式;ANSI控制码以ESC作为控制码的开始标记,在C语言中对应转义字符\033;然后以m作为结尾字符;在C中设定ANSI控制码的格式为: \033[控制码1;控制码2;控制码3;…;控制码nm...
2018-05-06 11:01:50
628
转载 常用ANSI控制码表
【光标控制】控制码 说明 [X;YH 将光标移至第 X 行,第 Y 列的位置。 [nA 光标上移 n 列。<<若至屏幕顶端则无效>> [nB 光标下移 n 列。<<若至屏幕底端则无效>> [nC 光标向右 n 行。<<若已至屏幕最右端则无效>> [nD 光标向左 n 行。<<若已至屏幕最左端则无效
2018-05-06 01:10:56
2598
原创 linux系统时间获取与设定
clock_gettime()原型为int clock_gettime (clockid_t __clock_id, struct timespec *__tp); 获取当前系统时间,示例:/** * clock_gettime()的第一个参数可以如下设定: * CLOCK_REALTIME:获取当前系统的绝对时间,从UTC1970-1-1 0:0:0开始计时; ...
2018-05-01 23:11:07
1303
原创 linux消息队列操作
基本函数说明int msgget (key_t __key, int __msgflg),创建消息队列;或者返回已经存在的消息队列的ID;int msgctl (int __msqid, int __cmd, struct msqid_ds *__buf),消息队列控制,如删除消息队列,获取消息队列的信息等;ssize_t msgrcv (int __msqid, void *__msg...
2018-05-01 14:59:19
864
原创 linux下pthread基本操作
常用pthread函数int pthread_attr_init (pthread_attr_t *__attr), 初始化pthread创建参数;int pthread_attr_destroy (pthread_attr_t *__attr),销毁pthread创建参数;int pthread_attr_getdetachstate (const pthread_attr_t *__...
2018-04-30 18:15:33
12924
原创 二分查找算法
二分查找算法简要介绍应用二分查找算法的前提是输入序列有序:升序或者降序;二分查找算法,每次取输入序列seq的中间下标middle对应的值与需要查找的key比较;对于升序序列而言:如果key>seq[middle],则将middle+1作为下一次查找的左边界,右边界不变;如果key < seq[middle],则将middle-1作为下一次查找的右边界,左边界不变;如果ke...
2018-04-15 22:58:23
264
原创 生成斐波拉契数列
斐波拉契数列介绍斐波拉契数列除了第一个和第二个数为1外,以后的数都是前面两个数之和;数学表示为:F(0)=1,F(1)=1;N>=2;F(N) = F(N-1)+F(N-2);最后产生斐波那契数列如下: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …代码实现#include <stdio.h>#includ...
2018-04-15 16:54:38
295
原创 C实现快速排序
快速排序算法概述快速排序是采用一种分治的策略;对输入的无序序列选择一个基准数,然后将比基准数小的放在左边(序列A),比基准数大的放在右边(序列B)(假设现在排序要求升序排列);然后对序列A和序列B分别再做为第二步的输入序列,重复第二步;递归操作上面两步,直到输入序列只剩下一个元素返回,这样整个原始序列就已经变为有序序列;快速排序的平均时间算法复杂度为O(nlogn),最差的情况下时间...
2018-03-20 13:48:41
280
原创 基于libjpeg实现的jpeg解码demo
使用的libjpeg版本为jpegsr9b,在上一篇blog有libjpeg在VS2012下的编译步骤: VS2012编译libjpeglibjpeg解码jpeg图片解码调用流程如下:static bool _jpgToRGBColor(PICTUREINFO picInputInfo, PICTUREINFO *picOutputInfo){ struct jpeg_de
2018-01-23 21:31:40
2150
原创 VS2012下编译jpeg编解码库:libjpeg.lib
整个编译工程已经上传到优快云:libjpeg编译工程工作前准备从IJG网站上下载最新版本的Libjpeg源码,网址如下: http://www.ijg.org/ 我下载时的版本是: jpegsr9b; 当然请安装VS2012的C++编译环境;理清编译libjpeg依赖文件因为我们下载的jpegsr9b.zip解压后不仅仅是包含编译Libjpeg.lib的源文件,也包含很
2018-01-06 17:55:22
2084
1
原创 CRC32算法实现:python与C
背景CRC32这种轻量级的校验算法在嵌入式开发中使用非常广泛,比如User data的存储,非关键数据的 保存(对于重要数据,一般不建议只用CRC32去校验其完整性,还会考虑加密处理).在PC端常用脚本 语言(例如python)去生成CRC32校验值值,而在嵌入式设备端,由于设备端能力有限,会直接使用C编写的程序去 做CRC32校验;python实现CRC32校验算法python实现crc32
2017-12-23 22:30:47
6266
原创 python实现任意位置文件分割
应用场景在嵌入式开发中,常常需要将一个binary文件分割成多个文件,或者将一个binary的某块区域抓成一个单独文件。本篇blog以python为例,实现了以上需求;实现代码#!/usr/bin/python"""./file_split.py, just for testing;"""import sysimport osimport refrom os.path import jo
2017-11-26 17:52:25
1153
原创 win10下Python3.5.4安装流程
一.初始环境介绍cmd进入DOS命令行,敲winver,弹出windows版本信息,如下图: 之前在Linux环境下安装过python2.7,这次选择python3.5.4版本安装(据说3.X版本有很多有用的新特性,如编码支持相较2.7更加友善.3.5.4是最近官网release中比较稳定的版本);然后从官网:python官网抓windows对应的python版本,如下: 在国内偶尔连接py
2017-10-14 02:24:59
4457
原创 Linux下简单的mount命令实现(自动识别文件系统类型)
背景简述mount()/umount()为Linux下挂载和卸载磁盘分区的系统调用,函数原型分别如下:int mount(const char *source, const char *target, const char *filesystemtype, unsigned long mountflags, const void *data);int umount(const char *ta
2017-09-27 19:56:11
6992
原创 wordpress安装add-from-server插件问题
小弟最近有在企鹅云上捣鼓一个主机,有尝试安装wordpress。有遇到wordpress只支持上传2MB大小的附件这种问题;所以想办法先将大的媒体文件传到主机,然后再将媒体文件添加到wordpress的数据库中; 现将解决方法记录如下:安装rz/sz命令因为在主机上没有安装ftp服务,所以为了方便上传下载文件,有安装rz/sz命令,主机是centos,如下安装方法:yum install lrz
2017-09-21 21:47:05
1863
原创 base64的C++实现
base64简介base64网络上已经有很多人有讲述,下面摘录wiki上的简述: Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base64单元,即3个字节可表示4个可打印字符。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9,这
2017-09-20 20:09:40
2640
source insight配置文件
2018-06-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人