自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 git push出现的问题与ssh相关

执行ssh-add时出现Could not open a connection to your authentication agent在执行 ssh-add ~/.ssh/id_ras 时发生此错,执行如下命令 ssh-agent bash然后再执行 ssh-add ~/.ssh/id_ras 即可。由于更新代码显示没有权限,不得不重置ssh1、删除.ssh文件夹下的文件2、$ git config --global user.name “用户名”$ git config --global.

2020-12-02 15:30:11 429

转载 bash: ./a.sh: /bin/bash^M: bad interpreter: No such file or directory的解决方法

https://blog.csdn.net/youzhouliu/article/details/79051516

2020-11-27 10:40:46 198

转载 linux-ubuntu 修改环境变量

https://blog.csdn.net/zdw_zoro/article/details/78051905

2020-11-27 09:39:28 295

转载 c中数组大小不能用变量的一个解决办法

c中数组大小不能用变量的一个解决办法

2020-07-16 17:35:23 965

转载 atol和strtol的区别

atol和strtol的区别

2020-07-13 16:21:16 484

原创 使用 strtok 提取 ip (点分十进制)网段

struct net_addr_in{ unsigned char sin_addr[4];//IP地址 unsigned short sin_port;//端口 unsigned char reserve[2];};unsigned char *data; data = strtok(ipaddr, "."); if(data != NULL) server.sin_addr[0] = atoi(data); while(data = strtok(NULL, "."

2020-07-10 11:24:51 260

原创 strstr 提取字符串时,需要清除\n\r

data = strtok(cmd->sendcmd, “\n”);if(strstr(cmd->recvdata, data) == NULL)否则一直是NULL

2020-07-09 17:03:42 995

转载 strstr(str1,str2)函数使用 出现问题解析

转载

2020-07-09 16:53:58 717

原创 枚举变量的循环取值

typedef enum { MODEM_CONNECT_BPS_1200 = 1200, MODEM_CONNECT_BPS_2400 = 2400, MODEM_CONNECT_BPS_4800 = 4800, MODEM_CONNECT_BPS_7200 = 7200, MODEM_CONNECT_BPS_9600 = 9600, MODEM_CONNECT_BPS_12000

2020-06-15 10:23:15 713

原创 (1)启动第一个程序

uboot的目的是启动内核内核的目的是启动应用程序内核启动后去运行哪个应用程序呢?怎么运行的呢?init_pos 执行应用程序,在init/main.c里: if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0) printk(KERN_WARNING "Warning: unable to open an initial console.\n"); (void) sys_dup(0); (void) sy

2020-05-24 17:52:36 241

原创 (2)内核配置的分析

引言:内核配置生成了 .config文件,那么这个文件都做了什么?一、分析过程我们从网卡的配置,来分析:vim ./config/dm9000 593 # 594 # Ethernet (10 or 100Mbit) 595 # 596 CONFIG_NET_ETHERNET=y 597 CONFIG_MII=y 598 # CONFIG_SMC91X is not set 599 CONFIG_DM9000=y 600 # CONFIG_CS89x0 is not set 601

2020-05-24 17:00:19 156

原创 (1)内核编译体验

1、解压缩2、打补丁3、配置a. make menuconfig 自定义配置b. 使用默认配置,在上面修改在内核文件里,搜索配置文件find -name “*defconfig*”c. 使用厂家提供的配置文件4、编译

2020-05-24 16:13:23 134

原创 第二十课(2)使用GPIO实现SPI协议操作OLED

1、代码结构我们现在想要操作OLED,通过三条线(SCK、DO、CS)与OLED相连,这里没有DI是因为2440只会向OLED传数据而不用接收数据。oled.c 发送数据gpio_spi.c 实现spi引脚的初始化2、gpio_spi.c的SPI_GPIO_InitGPF1作为OLED片选引脚,设置为输出;GPG2作为FLASH片选引脚,设置为输出;GPG4作为OLED的数据(Data)/命令(Command)选择引脚,设置为输出;GPG5作为SPI的MISO,设置为输入;GPG6作为

2020-05-24 12:02:11 773

转载 union各字段共享一块内存,以及union的用途

https://www.cnblogs.com/shirishiqi/p/5416935.html一、union各字段共享一块内存typedef u nion {long i; int k[5]; char c;} DATE;sizeof(DATE) = 20DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是201、union中可以定义多个成员,union的大小由最大的成员的大小决定。2、union成员共享同一块大小的内存,一

2020-05-13 22:33:12 595

原创 浮点变量不可用“==” 或“!=” 与数字比较,那么如何判断两个浮点数相等?

一、浮点变量不可用“==” 或“!=” 与数字比较 float i = 9.3654564; if(i == 9.3654564) { printf("test ok\n"); } else { printf("test error\n"); }运行结果为test error无论是 float 还是 double 类型的变量,都有精度限制。所以一定要避 免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。我没法理解为什么精

2020-05-13 20:19:49 844

原创 (3)uboot源代码分析

从makefile和mkconfig我们知道了,第一个运行的文件时 cpu/arm920t/start.S一、uboot源代码第一阶段所以我们从start.S着手分析源代码。uboot第一阶段是硬件相关的初始化:设置cpu为svc模式关闭看门狗屏蔽中断初始化SDRAM:blne cpu_init_critcpu的初始化 点进这个函数里,就能看到SDRAM的初始化: bl...

2020-05-04 16:40:19 1387

原创 (1)UBOOT编译体验

嵌入式系统:bootloader -->linux内核 --> 挂载根文件系统 --> 应用一、uboot体验1、烧写uboot1、解压缩2、打补丁patch -p1 <../补丁文件3、配置make 100ask4x0_config4、编译make2、uboot命令uboot有哪些命令?输入help对某个命令的具体解释,如:? mdprint...

2020-05-01 18:43:52 188

原创 第二十课(1)SPI协议介绍

一、SPI结构图SCK:提供时钟DO:作为数据输出DI:作为数据输入CS0/CS1:作为片选二、SPI模式1、时序图查看S3C2440芯片手册,P501,传输格式,下面讲解下图片怎么看:CPOL = 0, CPHA = 0 (Format A)CPOL = 0表示初始是低电平,如图下图画红线:CPHA = 0表示在第一个时钟沿采样数据。如图画红线所示,在上升沿采样数据:...

2020-05-01 14:17:04 872

转载 第十九课(1)IIC协议

一、I2C在硬件上的接法I2C在硬件上的接法如下图所示,主控芯片引出两条线SCL(serial clock),SDA(erail data)线,在一条I2C总线上可以接很多I2C设备,我们还会放一个上拉电阻(放一个上拉电阻的原因以后我们再说)。主从结构–> 一主多从二、s信号 p信号 ACK信号是怎么表示的?随便打开一个有IIC的芯片(1)开始信号(S):SCL为高电平时,S...

2020-04-30 17:27:34 553

原创 第十八课(2)触摸屏原理与接口

一、触摸屏原理从欧姆定律间接得到x坐标:触摸屏是由两层膜组成的。当点击触摸屏,两张膜就粘在一起,怎么得到触点的x坐标和y坐标呢?X坐标:Xp接3.3V ,Xm接地;Yp,Ym不接电源。这时,Yp就像探针一样,得出电压值,越靠近Xm则电压越小,然后根据欧姆定律得出X坐标。Y坐标:Yp接3.3V ,Ym接地;Xp,Xm不接电源。这时,Xp就像探针一样,得出电压值,越靠近Ym则电压...

2020-04-29 21:41:51 3700

原创 第十八课(1)ADC原理及编程

一、ADC原理模数转换器即A/D转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件。对于数字信号我们需要得到它的几个属性:用多少位来存储这个数据(假设10bit)。最大值0b111111111模拟信号输入的最大值是多少=>它对应的电压是多少伏我们就可以根据模拟信号(电压)的最大值,来计算出对应的数值。比如0b111111111为3.3v 那么0b11111...

2020-04-29 20:59:08 3537

原创 第十七课(6)LCD编程——实现除法/调色板

我们的逻辑还没有实现除法算法,因此先写一个确定值。//int clkval = (double)HCLK/plcdparams->time_seq.vclk/2-1+0.5;int clkval = 5;这节就完成除法的实现一、实现除法韦老师的错误:因为我的lib1funcs.S和老师不一样:lcd/s3c2440_lcd_controller.o: In function ...

2020-04-29 17:05:11 249

原创 对于“undefined reference to” 的解决思路

编译环境:linux版本:Ubuntu 5.4.0-6ubuntu1~16.04.11arm-linux-gcc版本:gcc version 4.3.21、去uboot/内核查找2、去库函数里查找(一般来说编译器自带很多库)echo $PATH 去查看下我们编译的目录,在该目录下查找库函数grep "__aeabi_i2f" * -nr把每个.a文件(静态链接库),都试下...

2020-04-29 14:51:41 1033

原创 第十七课(5)LCD编程——测试

uboot是裸板集大成者,所以我们去uboot上勋章strcmp函数的实现:/** * strcmp - Compare two strings * @cs: One string * @ct: Another string */int strcmp(const char * cs,const char * ct){ register signed char __res; wh...

2020-04-29 11:50:52 217

原创 第十七课(4)LCD编程

先完成:【lcd_controller.c】:向上接收不同LCD的参数,向下使用这些参数设置对应的LCD控制器【s3c244_lcd_controller.c】所以我们需要把LCD的参数写成一个结构体:lcd.h:#ifndef _LCD_H#define _LCD_Henum { NORMAL = 0, INVERT = 1,};/* NORMAL : 正常极性 *...

2020-04-26 16:13:32 1217

原创 第十七课(3)LCD编程——框架与准备

一、框架【lcd_test.c】 提供菜单来选择画圆写字等/ ********************************************************** /软件操作:画线、画圆、写字 【frambuffer.c用来画点】【geometry.c 画线画圆】【font.c写字】/ ********************************************...

2020-04-21 16:07:23 241

转载 第十七课(2)LCD控制器介绍

LCD控制器主要功能和需要的设置:取:从内存(FrameBuffer)取出某个像素的数据;之后需要把FrameBuffer地址、BPP、分辨率告诉LCD控制器;发:配合其它信号把FrameBuffer数据发给LCD;需要设置LCD控制器时序、设置引脚极性;先看下S3C2440芯片手册上的LCD控制器框图:通过设置REGBANK(寄存器组),LCDCDMA会自动(无需CPU参与,DMA...

2020-04-21 14:31:50 1410

转载 第十七课(1)LCD硬件原理

LCD上每一个点是一个像素。电子枪一边移动,一边发出颜色。电子枪如何移动?clk时钟线与LCD相连,每来1个clk,移动1个像素如何发出颜色?R、G、B三组信号线连接LCD确定颜色电子枪移动一行后,怎么知道要换行了?LCD接有HSYNC (水平同步信号 ),当接收到HSYN脉冲就跳行。电子枪移动到最后一行的最后一个点后,怎么知道要移动到原点?LCD接有VSYNC(垂直同步信号 )...

2020-04-21 12:04:18 700

原创 第十六课(2)Nand FLash编程_识别

NAND FLASH存储芯片编程需要的操作:存储芯片的编程NAND FLASH存储芯片编程初始化主控芯片的NAND FLASH控制器的初始化识别读取ID读操作一次读一个页(page)写操作一次写一个页(page)擦除一次擦除一个块(block)一般,一个块(block)=64个页(page)一、设置Nand Flash时序——初始化N...

2020-04-20 16:37:41 398

原创 十六课(1)Nand Flash的操作原理

1、从Nand原理图上分析从原理图上看,Nand Flash只有数据线,那么是怎么传输地址的?DATA0~DATA7既传输数据又传输地址。当ALE为高电平时传输的是地址;当ALE为低电平传输的是数据。从Nand Flash芯片手册可知,要操作Nand Flash需要先发出命令。那么说明数据线也传输命令,那么怎么分辨是命令呢?当CLE为高电平时传输的是命令;当CLE和ALE为低电平时传...

2020-04-20 14:46:16 689

原创 第十五课(3)Nor FLash编程_擦和写

1、读Nor Flash知识点:ascii可视字符和不可视字符可视字符打印出来,不可是字符打印“.”。我们先只打印64字节。#include "my_printf.h"#include "string_utils.h"void do_read_nor_flash(void){ unsigned int addr; volatile unsigned char *p; int i...

2020-04-20 10:58:08 384

原创 第十五课(2)Nor FLash编程_识别

1、 进入CFI模式#include "my_printf.h"#include "string_utils.h"#define NOR_FLASH_BASE 0 /* jz2440, nor-->cs0, base addr = 0 *//* 比如: 55H 98 * 本意是: 往(0 + (0x55)<<1)写入0x98 */void nor_wr...

2020-04-19 11:02:17 651

原创 arm-linux-gcc -march=armv4 可防止strh被拆分成strb

由 第十五课(2)Nor FLash编程_识别 得出的知识:在编译程序时加上:-march=armv4否则,volatile unsigned short *p = XXX;*p = val; //会被差分成2个strb操作

2020-04-18 22:25:30 220

转载 编译出现“__aeabi_uidivmod”和“__aeabi_uidiv”未定义(除法实现的问题)的解决方法

虽然参数是int类型,但是指针是short类型,所以也只用到低16bit

2020-04-18 14:20:37 4655 1

原创 第十五课(1)Nor FLash原理及硬件介绍

一、Flash介绍-NorNANDXIP(excute in place代码可以直接运行)Yesno性能(擦除)非常慢(5s)快(3ms)性能(写)慢快性能(读)快快可靠性较高,位反转的比例小于NAND Flash的10%比较低,位反转比较常见,必须有校验措施,比如TNR必须有坏块管理措施可擦除次数10000 ~ 1000...

2020-04-17 19:30:03 5099

原创 第十四课(7)定时器中断程序示例

一、引入定时器的概念定时器内部控制逻辑:①每来一个时钟 TCNTn 减1②当TCNTn == TCMPn,可以产生中断,也可以使对应的PWM引脚翻转(比如原来是高电平,现在是低电平)③TCNTn继续减1当TCNTn == 0时,可以产生中断,PWM引脚再次翻转④TCNTn == 0时,可自动加载初值CNTn 、TCMPn的值来自 TCMPBn TCNTBn怎么使用定时器?①设置...

2020-04-17 12:34:56 4149

原创 第十四课(6)按键中断程序示例

1、初始化中断控制器2、初始化按键,设置为中断源3、CPU中断使能cpsr的 I (字母) 位 为 0main循环打印字符串按下按键,产生中断,执行中断处理函数——点灯/灭灯处理完后 返回main继续打印原理图上按键接的中断源引脚:芯片手册外部中断源引脚:设置中断触发方式为双边沿触发:过滤 去掉某些文波外部中断屏蔽寄存器某一位设置为1后就禁止向中断控制器发送信号E...

2020-04-16 17:59:02 3008

转载 C语言register关键字—最快的关键字

出处:http://blog.sina.com.cn/s/blog_6a1837e90101128k.html怕楼主删帖所以复制一份register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率。注意是尽可能,不是绝对。你想想,一个CPU 的寄存器也就那么几个或几十个,你要是定义了很多很多register 变量,它累死也可能不能全部把这些变量放入...

2020-04-16 12:15:53 193

原创 第十四课(5)swi(software interrupt)异常程序示例

特权模式可以修改cpsr寄存器进入六种特权模式,但是用户模式是不能修改的;而我们的软件是运行在用户模式下的。当我们的app想访问硬件的时候,必须切换模式。那么怎么切换?发生异常==>中断、und但是中断和und是可遇不可求的,所以发生swi 软中断。bic ==> bit clear软件中断会进入管理模式reset不是4字节对齐的指令.align 4...

2020-04-14 16:30:52 595

原创 第十四课(4)und(未定义)异常程序示例

目标:写一个程序故意让其发生未定义异常,然后处理这个异常1、异常向量表——地址查看uboot中源码uboot\u-boot-1.1.6\cpu\arm920t打开start.S,可以看到异常向量表: /*code: 28 -- 72*/ #include <config.h> #include <version.h> /* ...

2020-04-13 17:56:21 1219

空空如也

空空如也

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

TA关注的人

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