自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(124)
  • 收藏
  • 关注

原创 嵌入式课堂小测试(二)

编写一程序,实现把一个文件的内容复制到另一个文件中的功能。可以参照Linux下cp命令所实现的功能来实现。程序源代码如下:(自行编写并调试通过,请勿复制上课时所提供的代码)#include #include #include #include #define MAX_SIZE 2048int main(int argc, char * argv[]){ 

2017-03-18 21:38:12 579

原创 嵌入式课堂小测试(一)

用C语言编写一个源程序文件main.c,要求实现以下功能。  (1) 打开当前目录下的文件 foo.txt,并将其内容显示出来。如果该文件不存在,就报告错误并退出。可以参照Linux下cat命令所实现的功能来实现。   (2) 编写一个能够利用make实现自动编译的文件Makefile,以便生成可执行文件main。main.c 的源代码如下:(要求通过实际运行调试,程序

2017-03-18 21:36:36 617

原创 实现对字符串进行循环右移

例如:输入abcdefgh,循环右移34位,输出ghabcdef[html] view plain copy #include stdio.h>  #include string.h>    #define MAX_SIZE 1024    char *move(char *input,int n)  {     

2016-12-31 19:51:02 825

原创 约瑟夫环

设编号1,2…..n的n个人围坐在一圈,任选一个正整数作为报数的上限值,从第k个人开始按顺时针报数,数到m的那个人出局,他的顺时针方向下一位又从1开始报数,数到m的那个人又出局,以此类推,直到所有人出局为止,请用链表写一个函数找出每轮的幸存者。(假设n个人已经插入链表)[csharp] view plain copy #include   

2016-12-28 20:12:44 354

原创 双向冒泡排序

以整数升序排序为例来简单说明一下双向冒泡排序的过程:首先从前往后把最大数移到最后,然后反过来从后往前把最小的一个数移动到数组最前面,这一过程就是第一轮,然后重复这一过程,最终就会把整个数组从小到大排列好。双向冒泡排序要稍微优于传统的冒泡排序,因为双向排序时数组的两头都排序好了,我们只需要处理数组的中间部分即可,而单向即传统的冒泡排序只有尾部的元素是排好序的,这时每轮处理都需要从头一直处理到已经排好

2016-12-27 21:44:24 589

原创 删除字符串中的指定子串

问题描述: 在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。注:I、   子串匹配只考虑最左匹配情况,即只需要从左到右进行字串匹配的情况。比如:在字符串"abababab"中,采用最左匹配子串"aba",可以匹配2个"aba"字串。如果匹配出从左到右位置2开始的"aba",则不是最左匹配,且只能匹配出1个"aba"字串。II、  输入字符

2016-12-26 21:04:53 872

转载 DNS的工作原理及解析

一、什么是DNS?DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。你可以把它想象成一本巨大的电话本。举例来说,如果你要访问域名math.stackexchange.com,首先要通过DNS查出它的IP地址是151.101.129.6

2016-12-25 21:24:58 21640 2

原创 用尽量高效的方法用”*”打印出一个空心正方形

请以尽量高效的方法用”*”打印出一个空心正方形,num为边长。void print_square(int num);[csharp] view plain copy #include     int main()  {      int x,y,num;      printf("please inpu

2016-12-24 22:52:28 3102

原创 多种排序法间的比较

冒泡排序          冒泡排序重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说排序完成。规模比较小的时候应用冒泡排序,主要应用于教学。。。选择排序--只会移动N次         选择排序的主要思想:首先找到数组中最小的那个元素,其次,将它和第一个元素交换。接下来找第二小

2016-12-23 23:48:41 318

转载 判断一个数是否为2的N次方问题

对于判断一个数是否为2的N次方问题,通常想到的最为直接的办法就是对这个数不断对2取余,为0就将该数变为该数除以2,直到最后该数为1为止。void judge(int n) { while(!(n % 2)) { n = n / 2; if(n == 1) { pri

2016-12-22 22:44:51 835

原创 shell基础入门

Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行shell编程,因为bash是免费的并且很容易使用。所以在本文中笔者所提供的脚本都是使用bash(但是在大多数情况下,这些脚本同样可以在 bash的大姐,bourne shell中运行)。   如同其他语言一样,通过我们使用任意一种文字编辑器,比如nedit、kedit、emacs、v

2016-12-21 20:43:31 300

原创 堆和栈的区别

简单的可以理解为: heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。 stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。 预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据

2016-12-20 22:16:31 263

原创 青蛙跳台阶问题

一只青蛙一次可以跳上1级台阶,也可以跳上2 级……它也可以跳上n 级,此时该青蛙跳上一个n级的台阶总共有多少种跳法?下面我们有数学归纳法分析一下这个问题: 用Fib(n)表示青蛙跳上n阶台阶的跳法数,青蛙一次性跳上n阶台阶的跳法数1(n阶跳),设定Fib(0) = 1;       当n = 1 时, 只有一种跳法,即1阶跳:Fib(1) = 1;     

2016-12-19 21:02:41 349

原创 C语言实现蛇形输出

实现如下的蛇形输出: 1   2   3   4   516 17 18 19  615 24 25 20  714 23 22 21  813 12 11 10  9 参考代码如下所示:[cpp] view plain copy #include   #include     int main

2016-12-18 21:34:53 2611

原创 递归与尾递归

一、递归1. 定义在计算机科学领域中,递归式通过递归函数来实现的。程序调用自身的编程技巧称为递归( recursion)。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义

2016-12-17 21:03:21 301

转载 uCOS-II内核之初始化及启动

uCOS-II内核之初始化及启动现在解释下程序编写的依据和实现过程。在uCOS-II里,在创建一个任务(或者调用其它系统服务之前),是需要先初始化系统,初始化uCOS-II需要调用函数OSInit()。调用函数OSInit()的作用是什么?主要实现以下几个功能:1、建立空闲任务及统计任务。2、初始化uCOS-II变量及数据结构。其中包括信号量,邮箱,消息队列等初始化

2016-12-16 21:38:36 468

转载 uCOS-II内核之时钟节拍

uCOS-II内核之时钟节拍在uCOS-II里,时钟节拍就好比是人的心脏一样重要。它对于CPU能顺利在各任务间切换有着至关重要的作用。uCOS-II需要用户提供时钟源。使用时钟源有一个特别需要注意的地方:用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用OSStart()之后。Ucos II中的时钟节拍服务是通过在定时器中断服务子程序中调用OSTimeTick()实现的。O

2016-12-15 21:34:53 918

转载 uCOS-II任务延时函数

uCOS-II任务延时函数编写过单片机程序的都知道,延时函数是经常被用到的。在uCOS-II里,系统也提供了这样的延时函数。一个是大众版的OSTimeDly(),一个是精致版的OSTimeDlyHMSM()。 萝卜青菜,各有所爱,随你怎么选。这两者的区别是,OSTimeDly()的延时时间是以节拍数来衡量的,OSTimeDlyHMSM()的延时时间则是以具体时间大小来衡量的。这两个

2016-12-14 22:27:40 663

转载 uCOS-II内核学习之任务调度

实现任务切换,需要调用函数OSSched()。OSSched()程序代码如下所示:[cpp] view plain copy void OSSched (void)  {      INT8U y;         OS_ENTER_CRITICAL();      if ((OSLockNesting | OSIntNest

2016-12-13 21:08:11 517

转载 uCOS-II内核之任务控制块

uCOS-II内核之任务控制块前面的学习已经了解过任务控制块。知道任务在创建的时候,任务控制块会被初始化。任务控制块是一个数据结构,当任务的CPU使用权被剥夺时,ucos II用它来保存该任务的状态。当任务重新得到CPU使用权时,任务控制块能确保任务从当时被中断的那一点丝毫不差地继续执行。OS­­_TCBs全部驻留在RAM中。 任务控制块的定义程序如下所示:[cpp

2016-12-13 21:06:59 452

转载 uCOS-II任务间通信之邮箱

uCOS-II任务间通信之邮箱学过信号量之后再来看邮箱,发现它们是非常相似的,甚至有时候邮箱可以当做信号量来使用,邮箱相对信号量而言,只是多传递了一个指针变量。和信号量很相似,ucos II提供了5个对邮箱进行操作的函数。它们是:1. 建立一个邮箱 -- OSMboxCreate()2. 等待一个邮箱中的消息 -- OSMboxPend()3. 发送一个消息到邮箱中 -- OS

2016-12-11 21:57:03 693

转载 uCOS-II任务间通信之信号量

uCOS-II任务间通信之信号量信号量是什么?信号量有什么用?信号量是可以用来表示一个或多个事件的发生,还可以用来对共享资源的访问。uCOS-II提供了5个对信号量进行操作的函数。如下所示:1. 建立一个信号量 -- OSSemCreate()2. 等待一个信号量 -- OSSemPend()3. 发送一个信号量 -- OSSemPost()4. 无等待地请求一个信号量

2016-12-10 21:03:05 778

原创 I/O多路复用- select函数

I/O 多路复用阻塞函数在完成其指定的任务以前不允许程序继续向下执行。如:当服务器运行到accept语句时而没有客户端请求连接,服务器就会停止在accept语句上等待连接请求的到来,这种情况称为堵塞,而非堵塞操作则可以立即完成。如:如果你希望服务器仅仅检查是否有客户在等待连接,有就接受连接,否则就继续做其他的事情,则可以通过使用select系统调用来实现,除此之外,select还可以同时监

2016-12-09 23:06:02 303

原创 TCP协议与UDP协议的区别

TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! TCP/IP协议是一个协议簇。里面包括很多协议的。UDP只是其中的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。 TCP/IP协议集包括应用层,传

2016-12-08 21:45:54 261

原创 三次握手、四次挥手

TCP三次握手所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。第一次握手: 客户端发送一个TCP的SYN标志位置1的包指明

2016-12-07 20:27:10 312

转载 BOOL,int,float,指针变量 与“零值”比较的if语句

以下摘自《林锐-高质量C++c编程指南》 /*   ----------------------------------------------------------------------------   */ if语句是C++/C语言中最简单、最常用的语句,然而很多程序员用隐含错误的方式写if语句。本节以“与零值比较”为例,展开讨论。 4.3.1   布尔变量与零值比较 

2016-12-06 21:59:16 6198

原创 IP地址分类

一、IP地址的介绍   1、IP地址的表示方法   IP地址 = 网络号+主机号   把整个Internet网堪称单一的网络,IP地址就是给每个连在Internet网的主机分配一个在全世界范围内唯一的标示符,Internet管理委员会定义了A、B、C、D、E五类地址,在每类地址中,还规定了网络编号和主机编号。在 TCP/IP协议中,IP地址是以二进制数字形式出现的,共32bit,1bi

2016-12-05 21:27:34 423

转载 TCP/IP参考模型及每层所用的协议、OSI参考模型

OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型的主机实现数据传输 。 完成中继功能的节点通常称为中继系统。在OSI七层模型中,处于不同层的中继系统具有不同的名称。 一个设备工作在哪一层,关键看它工作时利用哪一层的数据头部信息。网桥工作时,是以MAC头部来决定转发端口的,因此显然它是数据链路层的设备。具体说: 物理

2016-12-04 21:59:07 1452

转载 uCOS-II任务间通信之事件控制块

uCOS-II任务间通信之事件控制块信号、邮箱、消息队列都是需要先创建才能使用的,创建以上三者需要用到事件控制块这一东西。那什么是事件控制块呢?可以这样理解,前面学习我们已经知道,创建一个任务需要给这个任务分配一个任务控制块,这个任务控制块存储着关于这个任务的重要信息。那么,事件控制块就好比任务里的任务控制块。它存储着这个事件的重要信息,我们说创建一个事件(信号,邮箱,消息队列),其本

2016-12-03 20:20:27 543

原创 零欧电阻及其作用

我们经常在电路中见到0欧的电阻,对于新手来说,往往会很迷惑:既然是0欧的电阻,那就是导线,为何要装上它呢?还有这样的电阻市场上有卖吗?其实0欧的电阻还是蛮有用的。  零欧姆电阻又称为跨接电阻器,是一种特殊用途的电阻,0欧姆电阻的并非真正的阻值为零(那是超导体干的事情),正因为有阻值,也就和常规贴片电阻一样有误差精度这个指标。  以下总结了零欧姆电阻的一系列用法。  1.在电

2016-12-02 21:10:04 619

转载 uCOS-II任务管理之改变任务的优先级

uCOS-II任务管理之改变任务的优先级在uCOS-II 里,任务的优先级也是是可以修改的。优先级翻转问题是可以通过改变任务优先级解决。那什么是优先级翻转问题呢?所谓优先级翻转问题(priority inversion)即当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级任务抢先,因此造成高优先级

2016-12-01 21:46:01 2211

转载 矩阵乘法的算法实现

一般矩阵乘法算法:原理:矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的栏数(column)和第二个矩阵的列数(row)相同时才有定义。一般单指矩阵乘积时,指的便是一般矩阵乘积。若A为m×n矩阵,B为n×p矩阵,则他们的乘积AB会是一个m×p矩阵。其乘积矩阵的元素如下面式子得出:代码如下:struct mat{ int n, m; doubl

2016-11-30 18:25:53 1034

转载 函数局部变量的返回

昨天看到一道编程纠错题,在网上看到一个讲解非常详细的文章,这里拿来和大家分享一下:一般的来说,函数是可以返回局部变量的。 局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放了。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错。但是如果返回的是局部变量的地址(指针)的话,程序运行后会出错。因为函数只是把指针复制后返回了,但是指针指向的内容已经被释放了,这样指针指向

2016-11-29 21:43:28 223

原创 链表的简易实现

创建一个带头节点的链表,并把链表用递归法实现逆序以及链表遍历[cpp] view plain copy  #include   #include       /* define structure of linklist */  typedef struct Node  {      int

2016-11-28 21:53:55 336

原创 getchar()的灵活使用

getchar()在C程序中的功能是接收一个字符,当我们在连续输入字符的时候getchar()会给你意想不到的效果。下面是做的一些测试:首先看下面的这个程序:[html] view plain copy #includestdio.h>   #includestdlib.h>   int main(void)   {     

2016-11-27 21:51:26 261

转载 socket网络编程基础

1、网络中进程之间如何通信?        本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类:消息传递(管道、FIFO、消息队列)同步(互斥量、条件变量、读写锁、文件和写记录锁、信号量)共享内存(匿名的和具名的)远程过程调用(Solaris门和Sun RPC)        但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯

2016-11-26 21:04:53 335

转载 条件编译解析

这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。    条件编译命令最常见的形式为:    #ifdef 标识符    程序段1    #else    程序段2   

2016-11-25 21:57:17 423

原创 进程和线程间的关联和区别

进程概念  进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。在Mac、Windows NT等采用微内核结构的操作系统中,进程的功能发生了

2016-11-24 21:04:18 695

转载 【Linux C编程】sizeof面试题选

结构体和共用体的内存分配是C语言的一个难点,也是面试题中的热点。 示例1: Union data1 { double d; int i; char c1; char c2[9]; };sizeof(union data1)的值为16.在编译器默认设置的情况下,该共用体最大基本类型为double,它占8字节,所以此共用体以8来对齐。字符数组c2占9个字节,那么

2016-11-23 18:37:22 318

转载 线性表的链式存储结构

之前实现了线性表的顺序存储方式发现顺序存储方式是存在缺陷的,就是插入和删除时需要移动大量的元素,显而易见这种顺序存储的方式需要耗费大量的时间,那仫我们有没有办法解决它呢?这就是我今天要实现的线性表的链式存储结构...       我们知道在顺序表中它的物理存储位置是连续的所以当我们以顺序表的形式实现线性表的插入和删除时我们需要移动大量的元素; 假设线性表中的每个数据存储的位置存在间隙我们是

2016-11-22 19:08:30 372

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除