-
-
1相关命令: 1.终端打开系统设置命令:unity-control-center。 2.系统设置显示不正常(内容特别少)时,更新:sudo apt-get install --reinstall unity-control-center。 3.建议和我一样的菜鸟们不要轻易卸载ibus,后患无穷。ibus输入法设置:ibus-setup。 4.系统显示英文环境时,更改为中文方法: System Setting->Language Support,选中“汉语(中国)”项,拉到第一位,然后点击中间的按钮,意思是应用到整个系统。 5.如果以上还没解决,就找到System Setting->Text Input,查看使用的
-
2tftp,我用的是 ubuntu9.04,在网上看到了很多文章,但是发现很多文章讲的都很模糊,或者 根本就是 错的,只好自己琢磨,走了很多弯路,费牛劲终于弄出来了,为了避免同行和我 一样走弯路,特把我的一些总结贴出来和大家共享,有什么不对的地方希望大家指 正,大家 有什么问题也可以一起探讨一下。 ubuntu 9.10 下 tftp 设置方法: 1:sudo apt-get install tftp tftpd openbsd-inetd 特别指出很多文章里用的是 netkit-inetd,但是实际下载时发现 这个软件是下不到的,特改用 openbsd-inetd,实
-
1
-
1
-
0对memcpy函数的改进: 改进思想: 大部分认为memcpy是一个char到char的拷贝的循环,担心它的效率。实际上,memcpy是一个效率最高的内存拷贝函数,他不会那么傻,来做一个一个字节的内存拷贝,在地址不对齐的情况下,他是一个字节一个字节的拷,地址对齐以后,就会使用CPU字长来拷(和dma类似),32bit或64bit,还会根据cpu的类型来选择一些优化的指令来进行拷贝。总的来说,memcpy的实现是和CPU类型、操作系统、cLib相关的。毫无疑问,它是内存拷贝里效
-
3明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。 Input Param n 输入随机数的个数 inputArray n个随机整数组成的数组 Return Value OutputArray 输出处理后的随机整数 注:测试用
-
0中断下半部 断处理流程都会分为两部分:上半部分(tophalf)和下半部分(bottomhalf)。 1.中断可以随时的打断处理机对其他程序的执行,如果被打断的代码对系统很重要,那么此时中断处理程序的执行时间应该是越短越好。 2.通过上文我们知道,中断处理程序正在执行时,会屏蔽同条中断线上的中断请求;而更严重的是,如果设置了IRQF_DISABLED,那么该中断服务程序执行是会屏蔽所有其他的中断请求。那么此时应该让中断处理程序执行的越快越好。 这
-
5一、进程与内存 所有进程(执行的程序)都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存用途不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的。对任何一个普通进程来讲,它都会涉及到5种不同的数据段; 代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像。代码段
-
0位运算的运算分量只能是整型,位运算把运算对象看作是由二进制位组成的位串信息,按位完成指定的运算,得到位串信息的结果。 在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率。C语言提供了位运算的功能,这使得C语言也能像汇编语言一样用来编写系统程序。 例如:9|5可写算式
-
0位操作基础 基本的位操作符有与、或、异或、取反、左移、右移这6种,它们的运算规则如下所示: 符号 描述 运算规则 & 与 两个位都为1时,结果才为1 | 或 两个位都为0时,结果才为0 ^ 异或 两个位相同为0,相异为1 ~ 取反 0变1,1变0 << 左移 各二进位全部左移若干位,高位丢弃,低位补0 >> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移) 注意
-
0在对单处机进行编程的过程中,对位的操作是经常遇到的。C51对位的操控能力是非常强大的。从这一点上, 可以看出C不光具有高级语言的灵活性,又有低级语言贴近硬件的特点。这也是在各个领域中都可以看到C的重 原因。在这一节中将详细讲解C51中的位操作及其应用。 1、位运算符 C51提供了几种位操作符,如下表所示: 1)“按位与”运算符(&) 参加运算的两个数据,按二进位进行“与”运算。原则是全1为1,有0为0,即: 0&0=0; 0&1=0; 1&0=0;
-
0c语言位操作的一些注意事项 1. 位操作尽量使用unsigned char,而不是char,否则会使你混乱 如果你使用char,那么一个普通的字符,0xe3,因为首位是1,所以当他被转换为16位长时,成了0xffffffe3,而不是我们想要的0x000000e3,因为他是一个有符号的负数。 举例如下: #include <stdlib.h> #include <stdio.h> int main() { // char buf[10] = {0}; unsigned char buf[10] = {0}; char sbuf[10] = {0}; buf[0] = 0xe3; buf[1] = 0xb4; sbuf[0] = 0xe3; sbuf[1] = 0xb4; unsigned short pid1, pid2, pid3; /*bit operations with unsi
-
0函数名:cvAbsDiff 功能: calculates absolute difference between two arrays. 用法:void cvAbsDiff(const CvArr* src1, const CvArr* src2, CvArr* dst); 说明:src1 The first source array src2 The second source array dst The destination array dst(i)c = |src1(I)c − src2(I)c | All the arrays must have the same data type and the same size (or ROI size). 它可以把两幅图的差的绝对值输出到另一幅图上面来。在QQ游戏里面有一款叫做"我们来找茬",就是要找两幅图的不同点,下面是代码实现: [cpp] view plain copy print? #include<std
-
0//减去背景 int main() { IplImage* pFrame = NULL; IplImage* pFrImg = NULL; IplImage* pBkImg = NULL; CvMat* pFrameMat = NULL; CvMat* pFrMat = NULL; CvMat* pBkMat = NULL; CvCapture* pCapture = NULL; int nFrmNum = 0; //创建窗口 cvNamedWindow("video", 1); cvNamedWindow("background",1); cvNamedWindow("foreground",1); pCapture = cvCaptureFromFile("media.avi"); while(pFrame = cvQueryFrame( pCapture )) { nFrmNum++; //如果是第一帧,需要申请内存,并初始化 if(nFrmNum == 1) { pBkImg = cvCreateImage(cvSize(pFrame->width, pFrame->height)
-
0过程基本分四步或者三步走。第一步,加载图片。第二步,灰度化图片。第三步,Canny边缘化,第四步,检测直线或者圆。 首先,说明下OpenCv表示图片的结构是IplImage。这个东西代表了很多有用的东西。接下来的几步,都有该结构的指针对应图片。 第一步, 加载图 片。可以直接加载成灰度图,或者加载成彩色图,或者加载为原有图片的格式,第二步再灰度化。 直接加载为灰度图,IplImage* imgZero = cvLoadImage(szZero, CV_LOAD_IMAGE_GRAYSCALE);加载为彩色图,则把c
-
0/*指针的移动有个步长,步长等于sizeof(指针指向的元素类型) * /#include<stdio.h> int main(void) { int a[5] = {1, 2, 3, 4, 5}; int *ptr1 = (int*)(&a + 1); //&a指针指向的元素为整个数组,故加为sizeof(数组) int *ptr2 = (int*)((int)a + 1); //a地址再加一个字节,直接地址值相加而不是指针 int *ptr3 = (int*)(a + 1); //a为数组首元素的地址,a+1为数组第二个元素的地址 / * 数组a在内存的存放形式为 *01000000 020000000 03000000 04000000 05000000 *ptr2指向01000000的第二个字节,故*ptr2=00000002 * */ pr
-
01.基本概念 1.1地址 (1)逻辑地址:指由程序产生的与段相关的偏移地址部分。在C语言指针中,读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址。 (2)线性地址:段中的偏移地址(逻辑地址),加上相应段的基地址就生成了一个线性地址。 (3)物理地址: 放在寻址总线上的地址。 (4)虚拟地址:保护模式下段和段内偏移量组成的地址,而逻辑地址就是代码段内偏移量,或称进程的逻辑地址。 1.2内
-
2在应用程序获取视频数据的流程中,都是通过 ioctl 命令与驱动程序进行交互,常见的 ioctl 命令有: VIDIOC_QUERYCAP /* 获取设备支持的操作 */ VIDIOC_G_FMT /* 获取设置支持的视频格式 */ VIDIOC_S_FMT /* 设置捕获视频的格式 */ VIDIOC_REQBUFS /* 向驱动提出申请内存的请求 */ VIDIOC_QUERYBUF /* 向驱动查询申请到的内存 */ VIDIOC_QBUF /* 将空闲的内存加入可捕获视频的队列 */ VIDIOC_DQBUF /* 将已经捕获好视频的内存拉出已捕获视频的队列 */ VIDIOC_STREAMON /* 打开视频流 */ VIDIOC_STREAMOFF
-
31. 定义 V4L2(Video For Linux Two) 是内核提供给应用程序访问音、视频驱动的统一接口。 2. 工作流程: 打开设备-> 检查和设置设备属性-> 设置帧格式-> 设置一种输入输出方法(缓冲 区管理)-> 循环获取数据-> 关闭设备。 3. 设备的打开和关闭:#include <fcntl.h>int open(const char *device_name, int flags);#include <unistd.h>int clo se(int fd); 例: int fd=open(“/dev/video0”,O_RDWR); // 打开设备close(fd); // 关闭设备 注意:V4L2 的相关定义包含在头文件<linux/vid
-
0安装交叉编译工具链: 1、首先以root用户登入 2、复制arm-linux-gcc-4.3.2.tgz到根目录下tmp文件夹里 3、解压命令tar xvzf arm-linux-gcc-4.3.2 -C /注意以上命令必须要有-C而且是大写,后边有个空格也要注意。 4、配置下编译环境路径 在控制台下输入 gedit /root/.bashrc 等一会出来文本编辑器后在文件最后(最后一行)加上下面代码。export PATH=/usr/local/arm/4.3.2/bin:$PATH保存关闭后,注销当前用户,用root账号重新登录系统(使刚刚添加的环境变量生效)。 此时你可以在控
-
0
-
0一、基本描述 类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。 (1)分支搜索算法 所谓“分支”就是采用广度优先的策略,依次搜索E-结点的所有分支,也就是所有相
-
0对于从事应用程序开发来说,用户空间的任务调度与同步之间的关系相对简单,无需过多考虑需要同步的原因。这一是因为在用户空间中各个进程都拥有独立的运行空间,进程内部的数据对外不可见,所以各个进程即使并发执行也不会产生对数据访问的竞争。第二是因为用户空间与内核空间独立,所以用户进程不会与内核任务交错执行,因此用户进程不存在与内核任务并发的可能。以上两个原因使得用户同步仅仅需要在进程间通讯和多线程编程时需要
-
0
-
0#include <stdio.h> //#include <conio.h> void main(){ char ch; for(;;){ // system("stty -echo"); ch = getch(); if(ch==27) break; if(ch==13) continue; putch(ch); } } Linux实现conio.h中的getch()功能 在windows下写C程序时有时会用到conio.h这个头文件中的getch()功能,即读取键盘字符但是不显示出来(without echo) 后来发现含有conio.h的程序在linux无法编译通过,因为linux没有这个头文件,今天突然发现可以用其他方法代替,贴出来 //in windows #include<stdio.h> #include<conio.h> int mian(){ cha
-
0一。什么是进程 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。 系统资源:线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程;同一
-
1系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostname # 查看计算机名 # lspci -tv # 列出所有PCI设备 # lsusb -tv # 列出所有USB设备 # lsmod # 列出加载的内核模块 # env # 查看环境变量 资源 # free -m # 查看内存使用量和交换区使用量 # df -h # 查看各分区使用情况 # du -sh <目录名> # 查看指定目录的大小 # grep MemTotal /proc/meminfo # 查看内存总量 # grep MemFree /proc/meminfo # 查看空闲内存量 # uptime # 查看系统运
-
0Linux系统中的进程通信方式主要一下几种: 同一主机上的进程通信方式: Uinx进程间通信方式 A、管道(PIPE) 管道是一种办丧共的通信方式,数据只能单向流动,而且只能在具有亲缘关系(父子进程)的进程间使用。另外管道传送的是无格式的字节流,并且管道缓冲区的大小是有限的。 B、有名管道(FIFO)有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。 C、 信号(signal)信号是一种比较复杂的通信方式,用于通知接收进程某个
-
0一、 内存池的原理和实现 Linux采用的“按需调页”算法,支持三层也是存储管理策略。将每个用户进程4GB长度的虚拟内存划分成固定大小的页面。其中0支3GB是用户空间,3GB到4GB是内核空间,由所有进程共享,但只有内核态进程才能访问。 定义:内存池(MemoryPool)是一种内存分配方式。通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。 内存池:
-
0比较函数: 1.intbcmp(const void *s1, const void *s2, int n); 功能:比较字符串s1和s2的前n个字节是否相等 说明:如果s1=s2或n=0则返回零,否则返回非零值。bcmp不检查NULL 2. int memcmp(void *buf1, void *buf2, unsigned int count); 功能:比较内存区域buf1和buf2的前count个字节。 说明:当buf1<buf2时,返回值<0 当buf1=buf2时,返回值=0 当buf1>buf2时,返回值>02.1. int memicmp(void *buf1, void *buf2, unsigned int count); 功能:比较内存区域buf1和buf2的前count个字节但不区分字母的大小写。 说
-
0Linux安全攻略 如何才能让内存不再泄漏 本文将介绍内存泄漏的检测方法以及现在可以使用的工具。针对内存泄漏的问题,本文提供足够的信息,使我们能够在不同的工具中做出选择。 内存泄漏 在此,谈论的是程序设计中内存泄漏和错误的问题,不过,并不是所有的程序都有这一问题。首先,泄漏等一些内存方面的问题在有的程序语言中是不容易发生的。这些程序语言一般都认为内存管理太重要了,所以不能由程序员来处理,最好还是由程序语言设计
-
2因为lwIP主要用于嵌入式系统,内存要求比较高,所以要对那些小对象进行池化之类的处理来加快分配速度,减少内存碎片产生。 lwIP中主要有memp.h, memp_std.h, memp.c, mem.h, mem.c几个类组成了内存管理模块。 memp.c 动态内存池管理器, lwip拥有各种不同的内存池来为各个模块的小对象分配内存。 一个内存池主要有name,description,number(内存池里的内存节点的数目)和size(内存池里的内存节点的大小) 内存节点的struct描述: struct memp { struct memp *next; // 指向下一个内
-
0C++标准转换运算符const_cast 前面讲了C++继承并扩展C语言的传统类型转换方式,最后留下了一些关于指针和引用上的转换问题,没有做详细地讲述。C++相比于C是一门面向对象的语言,面向对象最大的特点之一就是具有“多态性(Polymorphism)”。 要想很好的使用多态性,就免不了要使用指针和引用,也免不了会碰到转换的问题,所以在这一篇,就把导师讲的以及在网上反复查阅了解的知识总结一下。 C++提供了四个转换运算符: const_cast <new_type> (expression
-
0关注嵌入式物联网行业及人才培养,每日更新,欢迎订阅及留言讨论~~~ 作者:倪键树,嵌入式物联网讲师。 Android的HAL层分析 1、Android的HAL是为了一些硬件提供商提出的“保护proprietary”的驱动程序而产生的东东,简而言之,就是为了避开Linuxkernal的GPL license的束缚。Android把控制硬件的动作都放到了user space中,而在kernel driver里面只有最简单的读写寄存器的操作,而完全去掉了各种功能性的操作(比如控制逻辑等),这些能够体现硬件特性的操作都放到
-
0一、udp.c实现的函数 1、void udp_input(struct pbuf *p, struct netif *inp) 说明:处理接收到的udp数据包。 参数:p数据
-
0extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指
-
0TCP还有最后一点东西需要扫尾。现在我们要跳出tcp_process函数,继续回到tcp_input中,前面说过,tcp_input接收IP层递交上来的数据包,并根据数据包查找相应TCP控制块,并根据相关控制块所处的状态调用函数tcp_timewait_input、tcp_listen_input或tcp_process进行处理。如果是调用的前两个函数,则tcp_input在这两个函数返回后就结束了,但若调用的是tcp_process函数,则函数返回后,tcp_input还要进行许多相应的处理。 要继续往下讲就得看看一个很重要的全局变量recv_flags
-
0移植了LWIP,发现内存不够用了。 1.MEM_SIZE 在OPT.H里面 2.LWIP里每个线程的堆栈空间的大小和线程数目。这个
-
02.Linux shell命令 2.1date 作用:获取或者设置日期 用法:date [选项] 显示时间格式(以+开头,后面接格式)
-
1最近在看驱动模型,是越看越糊涂,以前接触比较多的都是一些字符驱动,对字符驱动的框架有一定的了解。后来因为想在驱动中实现设备文件的创建,又了解
-
0S3C6410的GPIO引脚相对来说比较多,而且大部分引脚都具有多重复用功能,如何在linux上用最简单的方式来控制GPIO这需要我们好好研究一下底层的代码了,
-
11、对于Linux驱动开发来说,设备模型的理解是根本,顾名思义设备模型是关于设备的模型,设备的概念就是总线和与其相连的各种设备了。 总线、设备、驱
-
1
-
0在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 、HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②、HSE是高速外部时钟,可接石英/陶瓷谐振器
-
0智能家居是当前社会一个新颖的话题,也是电子技术发展的方面,把电子技术充分应用在生活中。然而到目前为止,智能家居才做到智能小区这个地步,因为实
-
0
-
2#include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/init.h> #include <linux
-
0使用rmmod会出现 rmmod : chdir(/lib/modules): No such file or directory ? 现在的内核模块在插入卸载时都会要转到 “/lib/modules/内核版本号/ ”
-
16第1章 +---------------------------------------------------+ | 写一个块设备驱动 | +---------------------------------------------------+ 同样
-
41. 如果遇到duplicate database 信息如下 line 42: E568: duplicate cscope database not added Press ENTER or type command to continue 那么就是vi