- 博客(45)
- 收藏
- 关注
原创 安安日志app-技术支持
安安日志是一款为企业员工定制的手机app【功能介绍】 员工每日提交当天工作情况,每周提交工作周记 可以查看七天内工作日志并修改技术支持联系人:朱文峰 电话:18272164927QQ:552071613邮箱:18272164927@163.com
2017-04-18 14:45:15
541
原创 安防运营支撑-云出警App
云出警系统是提供安保出警使用的APP,主要目的是为了改善现有出警业务主要以电话为核心进行调度的模式,通过出警APP实时进行警情的处理,主要功能:1、接收警情中心派发的警情推送2、提供客户的导航路线3、拍照上传,记录详细的出警过程4、查看历史出警完成的任务技术支持联系人:朱文峰 电话:18272164927QQ:552071613
2017-03-01 14:11:01
944
原创 利用c++模板实现快速排序
/* QuickSort.hpp */#ifndef _QUICK_SORT_H_#define _QUICK_SORT_H_templatevoid QuickSort(T *pInput, int low, int high){ if(low >= high) { return; } int first = low; int last = high; int
2015-05-15 10:03:02
529
原创 利用c++模板实现选择排序
/* SelectSort.hpp */#ifndef _SELECT_SORT_H_#define _SELECT_SORT_H_templatebool SelectSort(T *pInput, int nLen){ int i = 0; int j = 0; int nMin = 0; T tTemp; if(!pInput) { return false
2015-05-15 08:04:00
618
原创 利用c++模板实现冒泡排序
/* ArrayBubbleSort.hpp */#ifndef _ARRAY_BUBBLE_SORT_H_#define _ARRAY_BUBBLE_SORT_H_templatebool BubbleSort(T *pInput, int nLen){ int i = 0; int j = 0; bool bChange = false; T tTemp; if(!pI
2015-05-14 22:54:23
560
原创 利用c++模板实现插入排序
/* ArrayInsertSort.hpp */#ifndef _ARRAYINSERTSORT_HPP_#define _ARRAYINSERTSORT_HPP_templatebool InsertSort(T *pInput, int nLen){ int i = 0; int j = 0; T tTemp; if(!pInput) { return fal
2015-05-13 10:24:48
375
原创 利用c++模板实现单链表
/* SList.hpp */#ifndef _SLIST_H_#define _SLIST_H_#include using namespace std;templatestruct Node{ T m_Data; Node *m_pNext; Node() { m_pNext = NULL; }};templateclass CSList{pub
2015-05-13 08:39:09
391
原创 利用c++模板实现求数组最大值
#include templateint max_array(T *pInput, int nLen, T &max){ if(!pInput) { return 0; } max = pInput[0]; int i = 0; for(i = 1; i < nLen; i++) { if(max < pInput[i]) { max = pInput[i]
2015-05-09 22:02:50
2245
原创 shell脚本高级编程
1.什么是脚本脚本是一个包含一系列命令序列的文本文件。当运行这个脚本时,文件中包含的命令序列将得到自动执行。2.脚本编程技术2.1基本结构#!/bin/bash 指明使用bash解析器2.2变量shell脚本允许用户设置和使用自己的变量,变量可以是数字或者字符串,用户无需指定其类型,也无需在使用前定义。#!/bin/basha="hello world"b=
2015-05-09 11:10:39
831
原创 守护进程设计
1.什么是守护进程守护进程,也就是通常说的Daemon精灵进程,是linux中的一种服务进程。它的特点是:*不占用控制终端(后台运行)*独立于控制终端×周期性运行后台运行守护进程需要独立于任何一个控制终端。实现方法调用是通过创建子进程来充当守护进程,而父进程退出,这样子进程就可以在后台运行。pid=fork();if(pid>0) exit
2015-05-09 09:19:20
427
原创 并发服务器的设计
/* tcp_server.c */#include #include #include #include #define portnum 3333int main(){ int sockfd,newfd; struct sockaddr_in server_addr; struct sockaddr_in client_addr; char buffer[128];
2015-05-08 22:45:44
376
原创 UDP网络通讯编程
1.编程模型2.函数学习创建socket socket绑定地址 bind接收数据 recvfrom发送数据 sendto结束连接 close3.综合实例/* udp_server.c */#include #include #include #include int main(){ int sockfd; struct s
2015-05-08 11:57:52
527
原创 TCP通讯程序设计
1.编程模型2.函数学习创建套接字 socket绑定地址 bind地址类型struct sockaddr { sa_family_t sa_family; char sa_data[14];}struct sockaddr_in { short int sin_family; short int sin_fa
2015-05-08 08:03:19
717
原创 多线程同步
多个线程按照规定的顺序来执行,即线程同步条件变量实现线程同步1.初始化: pthread_cond_t cond_ready = PTHREAD_COND_INITIALIZER;2.等待条件成熟:pthread_cond_wait(&cond_ready,&mut);3.设置成熟条件:pthread_cond_signal(&cond_ready);综合
2015-05-07 20:31:45
513
原创 多线程程序设计
1.线程概念线程就是“轻量级”的进程线程与创建它的进程共享代码段和数据段线程拥有自己独立的栈2.函数学习创建线程函数名:pthread_create函数原型:int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine)(void *),void *arg)
2015-05-07 18:24:46
488
原创 消息队列通讯编程
1.基本概念消息队列就是一个消息的链表。而一条消息则可看做是一个记录,具有特定的格式进程可以按照一定的规则添加新消息;另一些进程则可以从消息队列中读走消息。2.函数学习创建消息队列函数名:msgget函数原型:int msgget(key_t key,int msgflg)函数功能:打开或创建消息队列头文件: 返回值:成功:返回消息队列的id 失败:-1参
2015-05-06 14:54:47
512
原创 ARM处理器启动流程分析
2440处理器1.启动方式:1.从Nor flash(2MB)启动 2.从NAND flash(256MB)启动2.NAND FLASH MEMORY MAPPING左边为Nor flash启动,右边为NAND flash启动处理器上电时会从0地址处运行,NAND flash不能直接参与内存的统一编址前4KB的BootSRAM又名Stepping ston
2015-05-05 07:49:57
915
原创 共享内存通讯
1.核心理论共享内存是IPC机制中的一种,它允许两个不相关的进程访问同一段内存,这是传递数据的一种非常有效的方式。2.函数学习创建/获取共享内存函数名:shmget函数原型:int shmget(key_t key,size_t size,int shmflg)函数功能:创建或者获取共享内存,并返回其描述符头文件: 返回值:成功:返回创建或获取到的共享内存的描述
2015-04-29 22:31:32
505
原创 信号量同步编程
1.核心概念-进程同步一组并发进程进行互相合作,互相等待,使得各进程按一定的顺序执行的过程称为进程间的同步。2.生产者消费者问题/* producter.c */#include #include #include #include #include #include void main(){ int fd; key_t key; int semid;
2015-04-27 16:29:52
339
原创 字符设备控制技术
字符设备控制技术设备控制理论控制理论-作用大部分驱动程序除了需要提供读写设备的能力外,还需要具备控制设备的能力。比如改变波特率。设备控制-应用函数在用户空间,使用ioctl系统调用来控制设备,原型如下:int ioctl(int fd, unsigned long cmd, ...)fd:要控制的设备文件描述符cmd:发送给设备的控制命令...:第三个参数为可选参数,
2015-04-26 08:58:53
349
原创 信号量互斥编程
1.核心理论信号量信号量(又名:信号灯)与其他进程间通信方式不大相同,主要用途是保护临界资源(进程互斥)。进程可以根据它判定是否能够访问某些共享资源。除了用于访问控制外,还可以用于进程同步。信号量分类:二值信号量:信号量的值只能取0或1计数信号量:信号量的值可以取任意非负值2.函数学习创建/打开信号量集合函数名:semget函数原型:int semget(key
2015-04-25 08:46:36
496
原创 字符设备驱动模型
1.使用字符驱动程序1.编译/安装驱动在linux系统中,驱动程序通常采用内核模块的程序结构来进行编码。因此,编译/安装一个驱动程序,其实质就是编译/安装一个内核模块。2.字符设备文件通过字符设备文件,应用程序可以使用相应的字符设备驱动程序来控制字符设备。创建字符设备文件的方法一般有两种: * 使用mknod命令 mknod /dev/文件名 c 主设备号 次设备号(c代表是字
2015-04-24 09:55:04
574
原创 信号通讯编程
1.核心理论信号类型:linux系统支持的所有信号均定义在/usr/include/asm/signal.h中,其中常见的信号有:SIGKILL: 杀死进程SIGSTOP: 暂停进程SIGCHLD:子进程停止或结束时用来通知父进程2.函数学习发送信号函数名:kill函数原型:int kill(pid_t pid, int sig);函数功能:向进程发送信号
2015-04-23 20:54:58
401
原创 linux驱动开发前奏
1.驱动开发概述驱动分类:1.常规分类:字符设备,块设备,网络设备字符设备:是一种按字节来访问的设备,字符驱动则负责驱动字符设备,这样的驱动通常实现open,close,read等系统调用,例如:串口,LED,按键块设备:在大部分unix系统中,块设备定义为:以块(通常是512字节)为最小传输单位的设备,块设备不能按字节处理数据。 而linux则允
2015-04-23 19:12:40
442
原创 有名管道通讯编程
1. 核心理论有名管道又称为FIFO文件,因此我们对有名管道的操作可以采用操作文件的方式,如使用open,write,read等。有名管道可以用于任意进程间通信。FIFO文件对比普通文件1. 读取Fifo文件的进程只能以“RDONLY”方式打开。2. 写Fifo文件的进程只能以“WRONLY”方式打开。3. Fifo文件里面的内容被读取后,就消失了,但是普通文件的内
2015-04-23 10:47:49
566
原创 无名管道通讯编程
1. 核心理论通讯目的:数据传输 资源共享 通知事件 进程控制进程间通信IPC(interprocess communication)由以下几部分发展而来:1. UNIX进程间通信2. 基于System V进程间通信3. POSIX进程间通信POSIX(Portable Operating System Interface)表示可移植操作系统接口,电气与电子
2015-04-22 20:53:44
658
原创 多进程程序设计
创建进程函数名:fork函数原型:pid_t fork(void);函数功能:创建一个子进程头文件;返回值:成功:在父进程中返回子进程的pid,在子进程中返回0 失败:-1#include void main(){ fork(); printf("program is end\n"); exit(0);}运行结果:program is end
2015-04-21 08:40:48
655
原创 时间编程
1.核心理论 * Coordinated Universal Time (UTC):世界标准时间,也就是格林威治时间 (Greenwich Mean Time,GMT) * Calendar Time:日历时间,从1970年1月1日0点到此时经历的秒数来表示时间2.函数学习获取日历时间函数名:time函数原型:time_t time(time_t *t);头文件:函
2015-04-20 19:56:57
403
原创 库函数方式文件编程
1.核心理论库函数:基于c函数库的文件编程是独立于具体的操作系统平台的,不管是在windows下还是linux下,都是使用这些函数,使用库函数进行程序设计可提高程序的可移植性。流:对于标准的c函数库,它们的操作都是围绕流来进行的。流是一个抽象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存或者网络连接。类似的,当程序需要写入数据的时候,就会开启一个通
2015-04-19 07:42:42
589
原创 linux内核链表
1. 链表对比1. 内核链表为双向循环链表,结构如下:struct list_head{ struct list_head *next,*prev;};2. 内核链表-函数1. INIT_LIST_HEAD: 创建链表2. list_add: 在链表头插入节点3. list_add_tail: 在链表尾插入节点4. list_del:
2015-04-18 21:26:10
332
原创 系统调用方式文件编程
1.核心理论文件描述符: 在linux系统中,所有打开的文件对应一个数字,这个数字由系统来分配,我们称之为:文件描述符。2.函数学习打开文件函数名: open函数原型:int open(const char *pathname, int flags); int open(const char* pathname,
2015-04-18 14:54:20
474
原创 linux内核子系统
1.linux内存管理子系统1.1内存管理模型1.2地址映射管理1.2.1虚拟地址空间的分布对于32位的系统,寻址范围为4G,0-3G为用户空间,即运行应用程序。3-4G为内核空间,内核空间又被划分为4个部分,这4个部分分别为:1.直接映射区,内存范围为3G到3G+896M,包括数据区和代码区,映射关系简单2.vmalloc区3.永久内核映射4.固定映射的线性地
2015-04-16 16:13:25
761
原创 静态函数库与动态函数库的设计
linux编程所需要的外部函数主要由函数库和系统调用提供,系统调用是linux内核实现的,而函数库是位于用户态的,函数库按链接方式的不同分为静态函数库和动态函数库
2015-04-15 20:33:42
337
原创 linux应用程序地址布局
1.linux可执行文件结构linux可执行文件在存储时(没有调入内存)分为代码区(text),数据区(data),未初始化数据区(bss):1.代码区:存放cpu执行时的机器指令,通常代码区是可共享的,是只读的,因此常量数据在编译时是在代码段分配空间。代码区的指令包括操作码与操作对象,如果是立即数,将直接包含在代码中,如果是局部数据,将在运行时在栈上分配空间,然后再引用该数据的地址2
2015-04-15 20:22:42
594
原创 内核模块的开发
1.内核模块设计1.1范例代码helloworld.c#include #include static int hello_init(void){ printk(KERN_WARNING"hello,world\n"); return 0;}static void hello_exit(void){ printk(KERN_WARNING"goodby,world\n
2015-04-15 10:31:55
389
原创 c中的空指针
1.什么是空指针?空指针是指值为NULL的指针,而且这个NULL在c和c++中的定义也是不一样的#define NULL 0 /*c中定义方式*/#define NULL (void*)0 /*c++中定义方式*/如果对一个空指针赋值,程序运行时将会产生段错误,例如:#include int main(){ int *p = NULL; *p = 1;
2015-04-12 22:47:41
487
原创 根文件系统的制作
1.建立根文件系统目录与文件1.1创建目录mkdir rootfscd rootfsmkdir bin dev etc lib proc sbin sys usr mnt tmp varmkdir usr/bin usr/lib usr/sbin lib/modules1.2创建设备文件cd rootfs/devmknod -m 666 console c 5
2015-04-12 10:28:58
321
原创 嵌入式linux内核制作
1.1 linux体系结构1.为什么linux会被划分为用户空间和内核空间? 答:ARM处理器提供其中工作模式:用户模式(usr),快速中断(Fiq),外部中断(irq),管理模式(svc),数据访问终止(abt),系统模式(sys),未定义指令异常(und),在不同的工作模式下拥有的权限是不一样的,linux利用这一机制,使用了两级来运行应用程序和linux内核,这样使操作
2015-04-08 15:12:40
974
原创 腾讯笔试题精选二
这些题目来自国嵌嵌入式培训视频《语言的艺术-笔试专题班》,特地整理下以便学习,如有错误欢迎指正1. 考虑函数原型 void hello(int a, int b=7, char* pszC="*"),下面的函数调用中属于不合法调用的是 (C)A. hello(5)B. hello(5, 8)C. hello(6, "#")D. hello(0, 0, "#")解析:本题考查C
2015-04-03 18:32:28
514
原创 linux开发环境的搭建
1. 安装配置交叉工具链将arm-linux-gcc-4.3.2拷贝到linux,分别执行以下命令tar xvzf arm-linux-gcc-4.3.2 -C 默认解压路径为/usr/local/arm添加环境变量 vi /etc/profile在其末尾添加export PATH=$PATH:/usr/local/arm/4.3.2/bin保存后执行source /etc/
2015-04-02 09:12:50
386
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人