自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

曹鑫的博客

学习园地

  • 博客(36)
  • 资源 (1)
  • 收藏
  • 关注

原创 SRE学习知识点

1.监控日志监控:Elastic + kibana+ flume服务器监控:zabbix prometheus2.自动化部署自动化部署:ansible(python)进阶:基础设施即代码配置管理:confd(go)3.数据库mysqlredisetcd4.灰度及现网实现openresty(lua)...

2020-07-05 21:14:18 647

原创 C++初识--C的升级(2)

引用VS指针引用:给一个变量起别名,不单独分配空间例:int a = 1;int &b = a;此时b是a的别名 指针保存的是地址,地址的空间是由操作系统的位数决定的,32的操作系统指针为4字节。  注:引用一定要初始化 C++中 引用形参可以改变实参空间中的保存内容 引用的另一个作用是用于函数的返回值 引用访问一个变量是直接访问,而

2017-02-07 14:32:13 267

原创 C++初识--C的升级(1)

嵌入式开发为什么学习C++? C语言为面向过程的语言,需求简单而固定,复用性、拓展性、维护性差。C++为面向对象的语言,复用性强,拓展性强,维护性强。 C++ = C语言+面向对象的方法论 C++支持的编程模式:主流:过程式面向对象泛型模式其他:数据抽象基于对象模板元形式 设计模式:简单工厂模式工厂模式适配器模式代

2017-02-07 14:13:49 257

转载 共享内存

共享内存的步骤1创建共享内存,并打开2映射共享内存3分离共享内存4控制共享内存,删除shmget函数的作用:在内核中创建共享内存函数的原型:int shmget(key_t  key,int size,intshmflg);函数的参数:key(键值 IPC——PRIVATE私有的键值)                      size:创建的内存大小   

2016-10-27 23:26:41 306

转载 消息队列

msgsnd函数的作用:写数据到消息队列函数的原型:int msgsnd(int msgid,const void *msggp,size_t int msgflg)函数的参数:msggp 消息、结构msgsize:消息的字节数msgflg:IPC_NOWAIT(写不进去直接返回)O:知道能写进去消息为止omsgctl函数的作用:控制

2016-10-26 23:11:25 277

原创 linux文件系统2

write作用:向文件中写入数据函数原型:ssize_t write(int fd,const void * buf,size count);头文件:#include #include #include 返回值:如果成功发回实际写入的字节数,失败返回-1

2016-10-25 23:02:10 203

转载 进程间的通信

1进程间可通过管道进行通信,管道管道是半双工,即单向传输2管道分为两种,有名管道和无名管道无名管道只能用于父子管道,兄弟管道等有亲近关系的进程之间,而有名管道则都可以。3创建管道必须在创建子进程之前,也就是说pipe()必须写在fork()之前4向管道写入时是从文件尾开始的,从缓冲区的头部输出

2016-10-24 23:36:40 180

转载 execl

execl函数的作用:执行一个文件函数的原型:int execl(const char *path, const char *arg,....)参数说明:path代表文件路径                  arg:表示argv【0】,argv【1】最后一个一NULL结束返回值:成功函数没有返回,出错返回-1execv函数原型:int execv(const st

2016-10-23 23:23:25 293

原创 Linux文件系统(1)-creat,open

creat函数作用:创建一个文件函数原型:int creat(const char * pathname,mode_t mode)包含的头文件:#include #include #include 返回值:成功返回新的文件描述,失败返回-1。open函数作用:打开一个文件函数原型:int open(const char * path,int flag

2016-10-20 23:08:23 283

转载 c语言代码评审小结

概述 在实际的软件开发项目中,代码评审是一个必不可少的流程。代码评审,也称之为代码复查,是指通过阅读开发人员所写的代码来检查源代码与编码规范的符合性以及代码质量的活动。总的说来,代码评审的好处有以下几点: 第一,发现程序问题,提高代码质量。 第二,理清代码逻辑,开阔编程思路。 第三,促进团队交流,提升开发技能。代码评审的大体流程是这样的: 第一步,团队负责人(通常是开发

2016-10-20 00:23:48 318

原创 goto语句及goto构成循环

goto语句是无条件转向语句,语句标符可由字母数字下划线组成,单不能单独用整数作为标号。如:goto label_1;上面的语句是合法的,而goto 123;是不合法的。goto语句一般有两种用途,第一种是和if一起构成循环结构,第二种是从循环体内跳出,但由于break和continue也有类似功能,所以现在不常用。

2016-10-09 21:47:14 5137

原创 lcd1602驱动

写一个字节void lcd_write(unsigned char byte,unsigned char flag){    if(flag)    {        RS = 1;    }      else    {        RS = 0;    }      RW = 0;    E  = 1;    LCDPORT = b

2016-09-29 22:39:40 417

原创 my_strcpy

void my_strcpy(char * s,char * d){    char * temps = s;    char * tempd = d;    if(*temps != '\0')    {           *tempd = *temps;        tempd++;        temps++;        if(tempd ==

2016-09-29 00:38:05 252

原创 51串口通信

串口初始化void uart_init(){    SCON = 0x50;    TMOD |= 0x20;    TH1 = 0xfd;    TR1 = 1;}发送一个字节void uart_byte(unsigned char byte){    SBUF = byte;    while(!TI);    TI = 0;}

2016-09-27 23:13:26 333

原创 数码管动态显示

所谓的动态显示就是数码管不断变化,当变化速度超过人眼的识别范围时看起来就像数码管一直显示。数码管动态显示时需要用到两个锁存器,一个是段锁存,一个是位锁存。一般开发板上使用的数码管动态显示,一组为八个数码管,这里可以称之为八位,每个数码管为一位,位锁存器就是决定哪一位亮起来,而位锁存器决定亮的那一位显示什么。动态显示一般先传段码,决定下一次显示什么内容,再传位码,使下一位亮起,段码和位码的内容都

2016-09-27 00:05:31 12369

原创 4乘4矩阵键盘扫描物理键值

物理键值扫描unsigned char keyscan(){    static unsigned char keyvalue;    KEYPORT = 0xf0;    if(KEYPORT != 0xf0)    {        delay_ms(10);        if(KEYPORT != 0xf0)        {  

2016-09-25 23:30:28 2116

原创 进程预习

进程定义:可并发执行的程序进程分类:交互进程,批处理进程,守护进程进程属性:1.进程ID2.父进程和父进程ID3.UID,GID4.进程状态5.进程优先级6.进程所连接的终端名7.进程资源占用父进程和子进程:父进程和子进程是管理与被管理的关系,当父进程终止时子进程也随之终止。但当子进程终止时父进程不受影响。

2016-09-24 23:35:23 147

原创 ds1302通信

#define ds1302_sec_add   0x80  #define ds1302_min_add   0x82  #define ds1302_hr_add   0x84  #define ds1302_date_add   0x86  #define ds1302_month_add  0x88  #define ds1302_day_add   0x8a  #

2016-09-23 23:30:25 352

原创 ds18b20单总线通信

dsresetvoid ds_reset(){    ds = 1;    ds = 0;    delay_us(200);    delay_us(200);    ds = 1;    delay_us(30);    if(0 == ds)    {        ack = 1;    }    else    {

2016-09-22 22:59:06 1240

原创 IIC总线协议

定义的全局变量sbit SDA = P?;sbit SCL = P?;bit ack;使用的延时函数void delay_us(unsigned char t){ while(--t);}IICstartvoid iic_start(){ SDA = 1; SCL = 1; delay_us(1); SDA =

2016-09-21 23:32:10 168

原创 预处理命令

一.宏定义1.不带参数的宏定义用一个标识符来代表一个字符串#define 标识符 字符串宏定义不需要以‘;’结尾如果定义#define PI 3.1415926;这里PI的值不是3.1415926,而是3.1415926;,分号被当作字符串的一个部分被赋值到PI中了。2.带参数的宏定义带参数的宏定义不只进行字符转换,还要进行参数转换如:

2016-09-20 23:46:46 168

原创 GTM900C调试1

一直在找机会调试GTM900C但是由于这样那样的原因一直没有成行,今天所有硬件软件齐全了,便开始了GTM900C的调试。GTM900C是经由串口跟上位机通信的,一般的GTM900C的命令格式都是AT+"    "。1.AT 说明书上说的是握手,但是由于使用命令后除了返回一个‘ok‘所以不能确定命令的功能。2.ATE简化显示3.AT+CLCC 来电显示3.ATD号码  拨

2016-09-19 23:09:08 553

原创 my_string-part1

my_strlenint my_strlen(char * str){ int len = 0; char * temp = str; while((*temp) != '\0') { temp++; len++; } return len;}my_strcmpint my_str

2016-09-18 20:25:03 254

原创 c语言常见错误1

字符变量用scanf赋值前不加getchar代码如下:#include int main(){    int num;    char ch;    scanf("%d",&num);    scanf("%c",&ch);    printf("num = %d",num);    printf("ch = %c",ch);    return

2016-09-18 00:05:59 214

原创 指针2

以a为例int a;                       整型变量int *a;                      整型指针变量int **a;                    整型指针的指针变量int a[10];                 整型数组int *a[10];               整型指针数组int (*a)[10];   

2016-09-14 21:50:30 162

原创 函数

函数:1.写函数可以提高代码的维护性和复用性。2.函数内部尽量不要调用其他函数。3.写函数迭代开发方式。函数三要素:函数名 形参 返回值函数名要能体现代码的功能,一般函数名由动词+名词,名词与动词间用下划线隔开但下划线连接的单词不能超过5个。取值时形参值交换取地址时实参值交换函数名也是一个指针常量,保存的是函数存放的地址,又称为函数入口地址。

2016-09-13 23:26:33 180

原创 c语言关键字

register关键字功能:请求编辑器尽可能地将变量存在cpu内部存储器中,省去抓取数据时间,提高程序运行效率。修饰寄存器变量:让变量值保持到寄存器中,频繁被访问的变量可上请为register变量。注:①register只能修饰局部变量,全局变量会被多个任务访问,当修饰为register时,只被当前 进程知道,所以全局变量不能使用register。②不能使用取地址获取r

2016-09-12 23:41:50 202

原创 μc/os 系统学习-任务2

在μc/os系统中内核负责任务的调度及管理,但内核也有一些缺点,那就是会增加ROM及RAM的用量,一般内核占cpu 2~5%。实时系统-调度调度是内核的主要职责之一,它决定轮到哪个任务运行。时间片轮转法:相同优先级的任务工作相同时间后轮转。优先级:缺点同处于就绪状态的任务,运行先后的值,通常在程序编写时就已经确定,在单片机中,cpu总是让优先级最高的任务先运行,优先级0为最高,越往

2016-09-11 23:34:46 374

原创 μc/osII 系统学习 - 任务

μC/os全称为Micro Control Operation System它是一款基于Rom运行的可裁剪抢占式实时多任务内核系统。μC/os系统一般都拥有临界代码段,所谓临界代码段就是处理时不可分割的代码,通常进入临界代码段时要开中断,执行玩完之后立即打开。实时操作系统为多任务系统,当执行一个任务(线程)时该程序认为CPU只属于自己。任务有如下几个状态:休眠 就绪 运行

2016-09-10 21:27:29 363

原创 μc/osII 学习笔记 - 实时性

单片机中程序有分前台和后台之分,其中前台程序为中断中的程序,后台程序就是主函数中while(1)中的内容。前后台系统的优点是简洁,简单,代码所占的空间相对较小。但是他也有一些缺点,那就是当程序规模较大时,程序难以管理,并且优先级判断较为迟钝。这时候就不得不提另一种系统,那就是实时操作系统。所谓实时操作系统,就是逻辑和时序出现偏差会引起严重后果的系统。他有较强的实时性,需要在特定的时间立即作出相应的

2016-09-09 23:35:08 353

原创 51单片机计时器中断

单片机中,中断算是一个比较重要的部分,在51单片机中有八种中断方式 ,其中常用的的有五种,分别是外部中断0,计时器中断0,外部中断1,计时器中断1,和串口中断。今天主要介绍的是计时器中断。    51单片机给我们提供了2个计时器中断,分别是计时器0和计时器1,他们对应的优先级分别是1和3,开启计时器并允许其中断后,计时器会从给定的初始值开始,每个指令周期加1,直到加到65535,再加一时计时器

2016-08-13 09:24:15 15180

原创 指针知识点

指针定义:指针是一个变量,保存的内容为地址。int num = 5;如果系统分配给num的空间为0x1000到0x1003 num的地址就为首字节地址0x1000。0x1000内保存的内容为5。定义指针pint* p = #指针p内保存的内容为num的地址,如果系统给p分配的地址为0x2000,可以得到下图指向内存空间和对应的内存空间:num++:对num对应的

2016-07-16 19:23:17 561

原创 格式化输入输出

格式化输入输出分别指scanf和printf函数。所谓格式化输入就是如果要输入,输入的格式必须与scanf中的格式相同,否则就无法输入。例如:scanf("num=%d",&num);如果直接输入数值"1",不能完成对num的赋值,只有输入“num=1”才能对num赋值。scanf输入的值通常先保存在缓冲区内,之后再根据变量数据类型取值。这样有时会产生问题,如果先对一个整型变量

2016-07-14 17:19:43 1151

原创 c语言的一些设问

主问题:为什么嵌入式选c答:因为linux内核用c编写问:为什么嵌入式内核用c编写答:因为c语言有以下三个特点1.有出色的移植性,能在多种不同硬件平台上运行2.c语言有简洁紧凑,使用灵活的语法机制,并能够直接访问硬件3.具有很高的运行效率问:什么是移植性答:一个平台上代码要在另一个平台上运移植xi行需要修改的地方越少,移植性越好。问:为什么内核不全部用汇编编写

2016-07-11 10:50:10 252

原创 gdb调试

gdb调试器主要有三大功能:1.启动被调试程序2.让被调试程序在指定位置停住3.查看状态 gdb调试gcc  -g  .c 文件编译.c文件并启动gdb调试gdb 可执行文件启动gdb调试 常用代码:run   执行文件list        查看代码break      设置断点next       单步执行(不会进入子函数)pri

2016-07-11 09:01:18 177

原创 浅谈嵌入式

学习笔记

2016-07-07 09:51:46 351

k8s 1.7套件

docker 版本docker-ce-17.12.0.ce-1.el7.centos.x86_64 k8s版本1.7.11

2019-02-15

空空如也

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

TA关注的人

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