- 博客(162)
- 资源 (1)
- 收藏
- 关注
原创 新人作业之基于TCP连接,用消息队列实现图片发送功能,
具体要求是:1、客户端接受图片,服务器发送图片,建立TCP 连接2、每次有客户端过来,服务器创建一个线程单独实现图片发送功能3、最多5个客户端同时连接服务器,超过5个就会失败4、服务器本地存储一张图片,在服务器处输入“start”之后,服务器就开始向在线的客户端发送图片5、客户端收到图片之后,保存到一个目录中,目录名是年月日,文件名为时分秒简单来说:就是服务器向客户端发送图片。。。。。...
2019-07-26 19:46:18 1064
原创 消息队列 传动图片
server.c`#include <stdio.h>#include <stdlib.h>#include <string.h>#include <mqueue.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/stat.h>...
2019-07-26 08:15:38 808
原创 设备驱动学习(一):hello 简单内核模块的编写
1、hello 简单内核模块的编写最近在看《linux设备驱动程序》这本书,刚看完第二章。。。。。先介绍下环境:本地有一个ubuntu的远程服务器,版本是~/Documents$ uname -r3.13.0-32-generic本来在kernel.org下载了linux4.9编译了hello的模块,但是insmod时候,报错:insmod: error inserting ‘./hel...
2019-02-20 14:37:23 699
原创 mini2440A 裸机编程:串口控制LED灯的亮灭
要求在PC上发送L11控制开发板led1亮,发送L10控制开发板led1灭;在PC上发送L21控制开发板led2亮,发送L20控制开发板led2灭;在PC上发送L31控制开发板led3亮,发送L30控制开发板led3灭;在PC上发送L41控制开发板led4亮,发送L40控制开发板led4灭;PC使用串口助手发送;代码#include <string.h>#include <stdlib.h>//0
2018-04-23 14:00:37 1074
原创 向RK3399中安装UVC驱动,并进行测试
上次安装了USB转串口的驱动,这次来详细的记录下UVC的驱动加载,步骤和USB转串口的步骤差不多。环境:1、PC端:ubuntu 16.04-3 LTS2、开发板:RK3399,跑的是官方SDK里的镜像一、安装UVC驱动1、在内核源码目录下,make menuconfig在弹出来的 菜单里面选择:Device Drivers > Multimedia suppo
2017-11-28 13:22:28 4532 4
原创 基于RK3399的USB转串口驱动模块的编译
首先参考了Firefly论坛上帖子:http://developer.t-firefly.com/thread-1546-1-1.html开发板里烧写的固件的版本是官方的:Firefly-rk3399_xubuntu1604_20171102.img进入kernel目录下,make menuconfig如:zjq@zjq:~/firefly_rk3399_sdk/kerne
2017-11-27 14:25:15 3745 4
原创 ubuntu系统用scp向RK3399发送文件
公司让我把RK3399开发板拿回家摸索摸索,故将遇到的各种问题记录下来:首先根据wiki上的教程将官方的镜像文件系统下载进板子,这个地方可以参考:点击打开链接然后我在上面配置了ssh,远程登录来对开发板进行一些相应的工作,这个可以参考https://jingyan.baidu.com/article/9c69d48fb9fd7b13c8024e6b.html配好了之
2017-11-25 14:40:29 1153
原创 从1到n整数中1出现的次数
一开始最容易想到的就是用for循环,每一位每一位的找是否等于1 int NumberOf1Between1AndN_Solution(int n) { int count=0; if(n<1) return 0; for(int i=1;i<=n;++i) { int temp=i;
2017-09-07 17:31:18 388
原创 自己实现memcpy函数
#include<stdio.h>void* Mymemcpy(void *dest,const void* src,size_t count){ char *tmpDest = (char *)dest; char *tmpSrc = (char *)src; size_t i;//内存有覆盖的区域,从尾部开始复制 if((tmpDest > tmpSrc) &&
2017-09-04 19:40:41 1502 1
原创 以AT24C02为例的IIC通信协议
IIC通信协议:双向二线制同步串行总线,只需要两根线即可在总线上器件之间传送信息,两根线分别是SDA和SCLSDA:双向数据线,为OD门,与其它任意数量的OD与OC门成"线与"关系。SCL:上升沿将数据输入到每个EEPROM器件中;下降沿驱动EEPROM器件输出数据。(边沿触发)(在读写的时候,SCL = 1时,SDA保持数据,不能在获取数据;SCL = 0,SDA 可以改变,
2017-08-27 17:01:56 3348
转载 LCD1602显示屏的驱动设置及例程
一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚)。我手里这块LCD1602的型号是HJ1602A,是绘晶科技公司的产品,它有16条引脚。如图1所示:图1再来一张它的背面的,如图2所示:图2它的16条引脚定义如下:引脚号符号
2017-08-25 15:29:49 81920 10
原创 约瑟夫环(数组和链表实现方式)
很经典的编程问题! 约瑟夫环问题的原来描述为,设有编号为1,2,……,n的n(n>0)个人围成一个圈,从第1个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,……,如此下去,问最后一个人的序号根据数据的存储方式分,我这边提供两种解题方法:一种是数组,一种是链表1、数组的解法,用a[]来存储编号,用count来计数,数到m对应的那个a[i]设为-
2017-08-14 15:03:00 1084 1
原创 把文件中的一组整数排序后输出到另一个文件中(c/c++)
我是自己先建立一个文本文件a.txt,里面写了整数: 1 23 45 67 89 0C语言实现:#include<stdio.h>#include<errno.h>#include<stdlib.h>void sort(int *a,int len){ int i; int j; for(i = 0; i < len-1; i++) { for(
2017-08-14 12:45:46 2564
原创 sqlite_exec回调函数的使用
在学习sqlite3小型数据库的时候,发现了sqlite3_exec的函数,可以调用回调函数具体的原型如下:原型:int sqlite3_exec(sqlite3* pDB, const char *sql, sqlite_callback callback, void*para, char** errMsg);功能:编译和执行零个或多个SQL 语句,查询的结果返回给回调函数callb
2017-08-12 16:04:07 28547 1
转载 ARM-LINUX内核管理——内存页表
Linux kernel集中了世界顶尖程序员们的编程智慧,犹记操作系统课上老师讲操作系统的四大功能:进程调度 内存管理 设备驱动 网络。从事嵌入式软件开发工作,对设备驱动和网络接触的比较多。而进程调度和内存管理接触少之有少,更多的是敬而远之。 我的理解,想在内核开发上有更深层次的技术进步,应该对内核的内存管理进程调度等深层技术有一定的理解。不过这2块内容是内核最核心的部分,实际内核开发工作
2017-08-10 15:40:02 1580
转载 自己实现printf()函数
大概去年夏天的时候,在《C和指针》里面一个练习题要求实现一个很简单的不包含打印浮点数功能的printf函数。但是很好奇,于是一直纠结下去,结果就是知道了printf的实现,自己也写了一个简单的。或许是夏天的原因吧,那时候暑假没回去,凌晨四点兴奋到不能睡觉。那时候刚开始写blog。没想整理一下,只是简单的把最重要的实现"工具"贴了一个blog在http://blog.csdn.net/cinmy
2017-08-10 11:12:18 619
原创 生产者和消费者(PV操作、共享内存)
生产者一直在往共享内存中写数据#include<sys/sem.h>#include<sys/shm.h>#include<stdio.h>#include<stdlib.h>#include<errno.h>#include"shm.h"int main(){ int ret; int shmid; int semid; int running;
2017-08-09 17:12:31 3337
原创 Linux文件操作命令
基本命令:1、切换命令:su 普通用户名 、su /root,切换成超级用户2、添加用户:addusr用户名3、修改密码:passwd用户名4、清屏:clear5、查看当前目录下的文件 ls6、显示当前目录下的详细信息:ls -l7、查看所有文件,包括隐藏文件:ls -a8、查看所有文件的详细信息: ls -al9、修改文件权限:chmod
2017-08-02 17:38:22 339
转载 分页存储管理方式——初解
一、连续分配方式缺点连续分配方式的主要缺点是会形成许多碎片,尽管我们可以通过紧凑的方法将碎片拼接成可用的大块空间,但这样须付出很大的代价。二、离散分配方式离散分配方式思想:将进程直接分散地装入到许多不相邻接的分区中。1.如果离散分配的基本单位是页----------》分页存储管理方式2.如果离散分配的基本单位是段----------》分段存储管理方式基本的分页存储管理方式
2017-08-02 14:23:34 6528
转载 有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除
有双向循环链表结点定义为: struct node { int data; struct node *front,*next; }; 有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除 BOOL DeteleNode(Node *pHeader, DataType Value) { if (pHeader == N
2017-08-02 12:46:35 1130
转载 用c++设计一个不能被继承的类
分析:这是Adobe 公司2007 年校园招聘的最新笔试题。这道题除了考察应聘者的C++ 基本功底外,还能考察反应能力,是一道很好的题目。 在Java 中定义了关键字final ,被final 修饰的类不能被继承。但在C++ 中没有final 这个关键字,要实现这个要求还是需要花费一些精力。 首先想到的是在C++ 中,子类的构造函数会自动调用父类的构造函数。同样,子类的析构函数也会自动调用父类的
2017-08-02 12:16:42 2558
原创 以下程序输出结果是____。
以下程序输出结果是__。class A{public: virtual void func(int val = 1) { std::cout<<"A->"<<val <<std::endl;} virtual void test() { func();}};class B : public A{public: void func(int val=0
2017-08-01 16:27:24 7068
原创 平衡二叉树
#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#include <string.h>#define LH 1 //left high#define EH 0 //equal high#define RH -1 //right high#define TRUE 1#define FALSE 0typedef struct
2017-07-27 19:32:49 296
原创 二叉排序树
二叉排序树或者是空树,或者是具有系列性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值均小于他的根结点的值 若它的右子树不空,则右子树所有结点的值均大 于它的根节点 它的左右子数也分别为二叉排序树 目的:提高查找和插入删除关键字的速度#include <stdio.h>#include <stdlib.h>#define FALSE 0#define TRUE 1//二叉
2017-07-27 11:18:16 292
转载 只有五行的Floyd最短路径算法
我们来想一想,根据我们以往的经验,如果要让任意两点(例如从顶点a点到顶点b)之间的路程变短,只能引入第三个点(顶点k),并通过这个顶点k中转即a->k->b,才可能缩短原来从顶点a点到顶点b的路程。那么这个中转的顶点k是1~n中的哪个点呢?甚至有时候不只通过一个点,而是经过两个点或者更多点中转会更短,即a->k1->k2b->或者a->k1->k2…->k->i…->b。比如上图中从4号城市到3号
2017-07-26 10:24:02 476
转载 Dijkstra算法(单源最短路径)
Dijkstra算法(单源最短路径) Dijkstra算法(单源最短路径) 单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路径。在弄清楚如何求算单源最短路径问题之前,必须弄清楚最短路径的最优子结构性质。一.最短路径的最优子结构性质 该
2017-07-26 10:06:15 462
原创 最小生成树——普利姆算法(prim)
这是摘抄自《大话数据结构》中的一句话,其实我是没看懂,但是看了代码,加上百度了之后,普利姆算法的步骤: 1、先假设之后一个节点,并同时把这些顶点的权值放在一个数组里,还有创建一个数组保存最小权值顶点的下标,找到这个节点边上的最小权值,这边的另一个节点为K 2、从节点K开始,再次寻找,把与k有关的权值放在一个数组里,若是比数组的值小就修改,同时修改下标的值,否则不改 3、重复2的步骤好吧,我也不
2017-07-25 13:09:24 1618
原创 下面有关继承、多态、组合的描述,说法错误的是?
下面有关继承、多态、组合的描述,说法错误的是?A、封装,把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏 B、继承可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展 C、隐藏是指派生类中的函数把基类中相同名字的函数屏蔽掉了 D、覆盖是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同答案: BC解析: A
2017-07-25 10:10:58 2121
原创 广度(宽度)优先搜索:队列
上一章详细的写出了深度优先遍历的四种情况的程序: http://blog.csdn.net/zscfa/article/details/75947816这一次来详细说说广度优先遍历: 广度优先搜索类似于二叉树的层序遍历,它的基本思想就是:首先访问起始顶点v,接着由v出发,依次访问v的各个未访问过的邻接顶点w1,w2,…,wi,然后再依次访问w1,w2,…,wi的所有未被访问过的邻接顶点;再从这些
2017-07-25 00:37:56 1204
原创 图的深度优先遍历(递归、非递归;邻接表,邻接矩阵)
众所周知,图有经典的两种遍历方式:深度优先遍历和广度优先遍历 首先我们就来说说深度优先遍历,其他的不说了,直接上代码,分为递归个非递归的方式啊首先是递归的方式实现的,比较简单,考虑到存储结构由邻接矩阵和邻接表,有分为两种:一种是邻接矩阵存储的递归,简单点说就是用数组来存储;另一种是邻接表存储的,也就是说用链表的方式存储的一、递归 1、邻接矩阵:#include<stdio.h>#define
2017-07-23 19:59:55 24502 9
原创 下列有关静态成员函数的描述中,正确的是:
下列有关静态成员函数的描述中,正确的是: A、静态数据成员可以在类体内初始化 B、静态数据成员不可以被类对象调用 C、静态数据成员不受private控制符作用 D、静态数据成员可以直接用类名调用答案:DA,静态成员属于类,而不是属于某个特定的对象,它是由该类的所有对象共享的,因此不能在类的构造方法中初始化 B,静态成员属于该类所有对象公有,可以被类对象调用 C,静态成员收private的
2017-07-21 21:57:17 10220
原创 请问对一个排好序的数组进行查找,时间复杂度为()
请问对一个排好序的数组进行查找,时间复杂度为() A、O(n) B、O(lgn) C、O(nlgn) D、O(1)
2017-07-21 21:50:14 2002
转载 常用排序算法总结
目录冒泡排序 鸡尾酒排序 选择排序 插入排序 二分插入排序 希尔排序 归并排序 堆排序 快速排序 我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。 排序算法大体可分为两种: 一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 另一种是非比较排序,时
2017-07-20 17:10:58 372
原创 用两个栈来实现一个队列,完成队列的Push和Pop操作。
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。class Solution{public: void push(int node) { stack1.push(node); } int pop() { int data; if(stack2.empty()
2017-07-20 16:17:14 395
转载 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。 #include<stdio.h> #include<errno.h> #include<string.h> #include<stdlib.h> #include<pthread.h> #define
2017-07-20 11:25:15 571
原创 下面哪些调用转换支持可变长度参数
下面哪些调用转换支持可变长度参数 A、cdecl B、stdcall C、pascal D、fastcal答案:A__cdecl __fastcall与__stdcall,三者都是调用约定(Calling convention),它决定以下内容:1)函数参数的压栈顺序,2)由调用者还是被调用者把参数弹出栈,3)以及产生函数修饰名的方法。 1、__stdcall调用约定:函数的参数自右向左通
2017-07-20 09:30:58 685
原创 设计模式——单例模式
单例模式:一个类只生成一个实例对象。要从生成唯一一个实例,构造函数就要设为私有,一般有两种模式:一位饿汉式,只有在空的时候分配内存class Singleton{private: Singleton() {} static Singleton* instance;public: static Singlenton* getInstance() {
2017-07-19 10:59:26 218
原创 重载赋值运算符(c++)
String& String::operator=(const String &str){ if(this == &str)//判断是否为本身,是的话就返回 { return *this } delete []str_; str_ = NULL; int len = strlen(str.str_)+1; str_ = new
2017-07-19 10:21:09 448
原创 基于栈的非递归方法实现二叉树
#include<iostream>#include<vector>#include<stdlib.h>using namespace std;struct BiNode{ char data; struct BiNode *left; struct BiNode *right;};typedef struct BiNode Node;typedef Node* Li
2017-07-18 23:46:34 488 1
原创 用链表实现二叉树的实现(递归)
/*链表的递归方法实现二叉树*/#include<stdio.h>#include<stdlib.h>#include<string.h>struct BiNode{ char data; struct BiNode *lchild; struct BiNode *rchild;};typedef struct BiNode Node;typedef Node* L
2017-07-18 18:45:57 1150
socket.rar
2019-07-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人