自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

嘿嘿白日的博客

成为自己想要成为的人

  • 博客(51)
  • 收藏
  • 关注

转载 #define中 #与##的神奇用法

http://zjf30366.blog.163.com/blog/static/411164582009061075923/#define f(a,b) a##b #define d(a) #a #define s(a) d(a) void main( void ) {     puts(d(f(a,b)));     puts(s(f(a,b))); } 输出结果: f(...

2019-01-23 15:20:33 224

转载 mtk平台的gpio控制

https://yq.aliyun.com/ziliao/273436 一.mtk平台的gpio控制 1.1 内核中的gpio配置 //设置gpio18为GPIO模式 mt_set_gpio_mode(GPIO18, GPIO_MODE_GPIO);   //设置gpio18方向为out mt_set_gpio_dir(GPIO18, GPIO_DIR_OUT); //设置gp...

2019-01-22 19:27:15 2341

转载 人工智能学习

http://www.cnblogs.com/NiceCui/p/8213723.html

2018-06-20 20:47:42 554

转载 Ubuntu 链接ln的使用:创建和删除符号链接

一 、 使用方式 ln [option] source_file dist_file (source_file是待建立链接文件的文件,dist_file是新创建的链接文件)-f 建立时,将同档案名删除. -i 删除前进行询问. ln -s abc cde 建立abc 的软连接 ln abc cde 建立abc的硬连接,二、 软链接与硬链接的区别(通俗)

2018-03-06 10:52:37 8424

转载 linux安装gcc-arm-none-eabi

1.下载地址https://launchpad.net/gcc-arm-embedded/+download2.安装方法     a.安装路径               cd usr/bin     b. 解压                     tar jxvf xxxxxxxxxxxxxxx.tar.bz2 -C /usr/bin

2018-03-01 14:16:45 1529

转载 Ubuntu(Linux) 下 unzip 命令使用详解

1.功能作用:解压缩zip文件2.位置:/usr/bin/unzip3.格式用法:unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]4.主要参数-c 将解压缩的结果显示到屏幕上,并对字符做适当的转换-p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。-l 显示压缩文件内

2018-03-01 13:56:13 465

转载 CodeWarrior for ARM Developer Suite v1.2

CodeWarrior for ARM Developer Suite v1.2安装及使用        简称ADS 1.2 .它支持ARM10之前的所有ARM 系列微控制器,支持软件调试及JTAG硬件仿真,支持汇编,c和c++源程序,http://www.mcu123.com 下载       1、安装:按照提示安装即可。安装完成后,提示出现 "ARM License Wizar

2018-03-01 10:31:57 10268 3

转载 typedef 用法总结

在C还是C++代码中,typedef都使用的很多,在C代码中尤其是多。typedef与#define有些相似,其实是不同的,特别是在一些复杂的用法上,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引用过来了,加上自己的一个分析。基本定义:typedef为C语言的关键字,作用是为一种数据类型定

2017-12-27 15:37:54 306

转载 C语言运算中的数据类型自动转换原则

问题1: unsigned int a=20; signed int b=-130;a>b?还是b>a?实验证明b>a,也就是说-130>20,为什么会出现这样的结果呢?问题2:signed int b=-130;std::cout输出为-100。 问题3:unsigned int i=3;cout第一反应:-3。不过

2017-12-19 15:35:24 3874

转载 extern关键字

extern关键字会提升变量或者函数的逼格,使得它们可以跨文件被访问。话虽然是这么说,使用这个关键字必须要注意一些东西。首先,你得在cpp文件里面实现这些全局变量和全局函数,这是最基本的,然后只需要在需要用到这些变量和函数的文件里声明一下,用extern修饰声明,这样弄完之后就可以随意使用这些全局变量和全局函数了。请不要为编译器担心,担心它们找不到这些东西,只要你实现了,不怕编译器找不到。

2017-12-05 20:12:03 176

转载 unbuntu vim 配置

资料:http://jingyan.baidu.com/article/046a7b3efd165bf9c27fa915.html1.Vim的安装: 输入命令:sudo apt-get install vim-gtk 2.Vim的配置: (1)刚安装的VIM,可能界面并不是十分友好,这就需要我们去更改vim的配置文件,按照我们的需求去修改它。 在命令行下,输入命令:

2017-12-05 16:29:06 492

转载 static作用

static作用:“改变生命周期” 或者 “改变作用域”  程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。1.作用于变量:   用static声明局部变量-------局部变量指在代码块{}内部定义的变量,只在代码块内部有效(作用域),其缺省的存储方式是自动变量或说是动态存储的,即指令执行到变量定义处时才给变量分配存储单元,跳出

2017-12-05 09:53:46 196

转载 C++构造函数、拷贝构造函数、赋值函数浅析

C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法。下面就详细比较下三者之间的区别以及它们的具体实现1.构造函数构造函数是一种特殊的类成员函数,是当创建一个类的对象时,它被调用来对类的数据成员进行初始化和分配内存。(构造函数的命名必须和类名完全相同)首先说一下一个C++的空类,编译器会加入哪些默认的成员函数·默认构造函数和拷贝构造

2017-11-30 23:57:59 154

转载 c++中冒号(:)和双冒号(::)的用法

1.冒号(:)用法(1)表示机构内位域的定义(即该变量占几个bit空间)typedef struct _XXX{unsigned char a:4;unsigned char c;} ; XXX(2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。struct _XXX{_XXX

2017-11-26 23:15:50 218

转载 8种排序方式

1.选择排序定义:首先,选出数组中最小的元素,将它与数组中第一个元素交换。然后找出次小的元素,并将它与数组中第二个元素交换。按照这种方法一直进行下去,直到整个数组排完序。交换次数:N-1缺点:运行时间对文件已有序的部分依赖较少,从文件中选出最小元素的每一遍操作过程,并没有给出下一遍要找的最小元素的位置的相关消息。例如,该程序对已排好序的文件或各元素都相同的元素文件与对随机排

2017-11-07 00:39:44 10335

转载 printf()经常有重入和性能上,不可重入意思?

1.zz这个概念在嵌入式操作系统中比较重要,由于存在任务的调度,它实时系统,可剥夺型内核中是危险的,如同一个安静的水雷。可能会被触发,也可能安然无恙。由于它运行结果的不可预期性,会使系统带来隐患 下面引用一段别人的解释:这主要在多任务环境中使用 CodeGo.net,一个可重入的函数简单来说,就是:可以被中断的函数。就是说,你可以在这个函数执行的任何时候中断他的运行,在OS的调度下去执行另

2017-11-02 19:07:58 963

转载 typedef和#define的用法与区别

typedef和#define的用法与区别一、typedef的用法在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像:typedef    int       INT;typedef    int       ARRAY[10];typedef   (int*)   pINT;typedef可

2017-11-02 19:06:40 157

转载 系统调用实现过程

系统调用的实现与一般过程调用的实现相比,两者间有很大差异。对于系统调用,控制是由原来的用户态转换为系统态,这是借助于中断和陷入机制来完成的,在该机制中包括中断和陷入硬件机构及中断与陷入处理程序两部分。  中断和陷入硬件机构  图1所示为中断的处理过程。中断可进一步分为外中断和内中断。外中断是指由于外部设备事件所引起的中断,如通常的磁盘中断、打印机中断等;而内中断则是指由于CPU内部

2017-10-31 15:21:01 13656

转载 assert()宏

assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include assert.h>void assert( int expression );  assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.

2017-10-30 12:47:44 181

转载 变量声明和定义的区别

我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益)变量的声明有两种情况:1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。2、另一种是不需要建立存储空间的。 例如:extern int a 其中变量a是在别的文件中定义

2017-10-24 16:55:35 3926 2

转载 STM32 IO口工作模式

一、推挽输出:可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。        推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽

2017-10-24 15:51:17 2635

原创 上下拉电阻的作用

这是在论坛上收集到的一些总结:一、OC、OD门,这种门结构如果不做上拉的话,是不能实现电平的高底跳变的,不能实现跳变,便不能表征数据二、驱动能力,我们看很多的CPU或者MCU的UART端口上都会上拉电阻(有的为单端上拉,有的双端都上拉),目的就是为了提高驱动能力,保证距离的长度不会影响数据的幅度能在接受端正确采样,曾经自己还很好奇的将一些产品的上拉去掉,测试证实,仍旧可以完

2017-10-24 15:24:37 1452

转载 C++中引用的用法

引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。我在工作中发现,许多人使用它仅仅 是想当然,在某些微妙的场合,很容易出错,究其原由,大多因为没有搞清本源。故在本篇中我将对引用进行详细讨论,希望对大家更好地理解和使用引用起到抛砖 引玉的作用。  一、引用简介  引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一

2017-10-21 16:19:42 279

转载 函数参数的传递

先来几道题压压惊先:第一题:void Exchg1(int x, int y){ int tmp; tmp = x; x = y; y = tmp; printf("x = %d, y = %d\n", x, y);}int main(void){ int a = 4,b = 6; Exchg1(a, b)

2017-10-21 15:44:10 142

转载 C++ const用法

C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。1.const 修饰成员变量  1 #include 2 using namespace std; 3 int main(){ 4 int a1=3; ///non-cons

2017-10-20 10:22:35 137

转载 c 枚举类型详解

在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。以每周七天为例,我们可以使用#define命令来给每天指定一个名字:#include #define Mon 1#define Tues 2#define Wed 3#define Thurs 4#

2017-10-20 09:32:31 391

转载 C++ namespace详解

所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。由于namespace的概念,使用C++标准程序库的任何标识符时,可以有三种选择:1、直接指定标识符。例如std::ostream而不是ostream。完整语句如下:std::cout 2、使用using关键字。using

2017-10-20 08:52:34 2634

转载 linux网络编程之socket(七):一个进程发起多个连接和gethostbyname等函数

一、在前面讲过的最简单的回射客户/服务器程序中,一个客户端即一个进程,只会发起一个连接,只要稍微修改一下就可以让一个客户端发起多个连接,然后只利用其中一个连接发送数据。先来认识一个函数getsockname  #include   int getsockname(int sockfd, struct sockaddr *addr, socklen_t *ad

2017-10-19 19:15:54 206

转载 linux网络编程之socket(六):利用recv和readn函数实现readline函数

在前面的文章中,我们为了避免粘包问题,实现了一个readn函数读取固定字节的数据。如果应用层协议的各字段长度固定,用readn来读是非常方便的。例如设计一种客户端上传文件的协议,规定前12字节表示文件名,超过12字节的文件名截断,不足12字节的文件名用'\0'补齐,从第13字节开始是文件内容,上传完所有文件内容后关闭连接,服务器可以先调用readn读12个字节,根据文件名创建文件,

2017-10-19 19:14:40 153

转载 linux网络编程之socket(五):tcp流协议产生的粘包问题和解决方案

我们在前面曾经说过,发送端可以是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据,也就是说,应用程序所看到的数据是一个整体,或说是一个流(stream),一条消息有多少字节对应用程序是不可见的,因此TCP协议是面向流的协议,这也是容易出现粘包问题的原因。而UDP是面向消息的协议,每个UDP段都是一条消息,应用程序必须以消

2017-10-19 19:13:12 178

转载 linux网络编程之socket(四):使用fork并发处理多个client的请求和对等通信p2p

一、在前面讲过的回射客户/服务器程序中,服务器只能处理一个客户端的请求,如何同时服务多个客户端呢?在未讲到select/poll/epoll等高级IO之前,比较老土的办法是使用fork来实现。网络服务器通常用fork来同时服务多个客户端,父进程专门负责监听端口,每次accept一个新的客户端连接就fork出一个子进程专门服务这个客户端。但是子进程退出时会产生僵尸进程,父进程要注意处理SIGCHLD

2017-10-19 19:12:02 252

转载 linux网络编程之socket(三):最简单的回射客户/服务器程序、time_wait 状态

下面通过最简单的客户端/服务器程序的实例来学习socket API。echoser.c 程序的功能是从客户端读取字符然后直接回射回去。 C++ Code 1234567891011121314151617181920212223242526

2017-10-19 19:10:30 369

转载 linux网络编程之socket(二):C/S程序的一般流程和基本socket函数

一、基于TCP协议的网络程序下图是基于TCP协议的客户端/服务器程序的一般流程:服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时

2017-10-19 19:08:40 285

转载 网络中进程间的通信

进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal)UNIX system V有:消息(message)、共享存储区(shared memory)和信号量(semaphore)等.他们

2017-10-19 18:59:34 1922

转载 IP和端口间的联系

TCP/IP协议中的端口指的是什么呢?如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口可以有65536个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535。端口有什么用呢?我们知道,一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来实现。

2017-10-16 17:21:41 625

转载 linux网络编程之socket(一):socket概述和字节序、地址转换函数

一、什么是socketsocket可以看成是用户进程与内核网络协议栈的编程接口。socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信。socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4、IPv6,以及以后要讲的UNIX Domain Socket。然而,各种网络协议的地址格式并不相同,如下图所示:

2017-10-16 16:18:31 550

转载 C语言 volatile 关键字

volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short flag;v

2017-10-14 01:02:50 145

转载 C语言条件编译与预处理

一、C语言由源代码生成的各阶段如下:C源程序->编译预处理->编译->优化程序->汇编程序->链接程序->可执行文件    其中 编译预处理阶段,读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。或者说是扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。预处理过程先于编译器对源代码进行处理。    在C 语言中,并没有任何内在的机制来完成如下一些功能:

2017-10-13 15:17:33 2294

转载 STM32 HAL库、标准外设库、LL库(STM32 Embedded Software)

STM32 Embedded Software  工作以来一直使用ST的STM32系列芯片,ST为开发者提供了非常方便的开发库。到目前为止,有标准外设库(STD库)、HAL库、LL库 三种。前两者都是常用的库,后面的LL库是ST最近才添加,目前支持的芯片也偏少。各库如下所示:    其中,STD库和HAL库两者相互独立,互不兼容。几种库的比较如下:    目

2017-10-04 11:21:56 632

转载 scanf()函数用法

虽然有人说在大型程序设计中永远不要使用scanf(),但是对于习惯用C的人和参加ACM/ICPC的人,scanf()还是用的比较多的,而且用好了用起来也很方便 下面整理一点儿平时常需要用到而可能有些人一直理不清的一些知识 一般常识:scanf()函数的一般格式为:scanf("格式字符串",输入项首地址表)scanf的格式控制的一般形式为:%[*][宽度][F|N]

2017-09-29 23:45:12 723

空空如也

空空如也

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

TA关注的人

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