- 博客(68)
- 收藏
- 关注
转载 linux中c多线程同步方法
线程的最大特点是资源的共享性,但资源共享中的同步问题是多线程编程的难点。linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。一、互斥锁(mutex)通过锁机制实现线程间的同步。初始化锁。在Linux下,线程的互斥量数据类型是pthread_mutex_t。在使用前,要对它进行初始化。 静态分配:pthread_mutex_t mutex = PTHREAD_...
2018-09-13 16:27:26 1654
转载 线程中常用的函数(转载)
线程基本操作:函数 说明 pthread_create() 创建线程开始运行相关线程函数,运行结束则线程退出 pthread_eixt() 因为exit()是用来结束进程的,所以则需要使用特定结束线程的函数 pthread_join() 挂起当前线程,用于阻塞式地等待线程结束,如果线程已结束则立即返回,0=成功 pthread_cancel() 发...
2018-09-06 16:27:51 1086
转载 关于线程同步里面的函数解析
一、有关互斥锁的函数 1、 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);//初始化一个互斥锁 2、int pthread_mutex_lock(pthread_mutex_t *mutex);//用于锁定给定的互斥锁。 如果互斥锁当前已解锁,则它将被...
2018-09-06 16:22:21 201
原创 将一个普通进程变为守护进程
将一个进程变为一个守护进程:(1)子进程等待父进程死亡(2)子进程使用setsid创建新的会话期,脱离控制台(3)调用chdir将当前工作目录设置为/,脱离文件系统(4)umask设置为0以取消任何文件的权限屏蔽,使权限最大(5)关闭所有文件描述符(先要通过函数sysconf()来获取系统最大的文件打开数)(6)将0,1,2定位到/dev/null(将标准输入,标准输出,标准错误弄到回...
2018-09-05 09:36:04 1534
原创 linux中socket编程基础
首先看一下关键的几个函数:1、int socket(int protofamily,int type,int protocol);//返回sockfd sockfd是描述符。 socket函数的作用是创建一个socket描述符,它是唯一识别一个socket。这个socket描述符和文件描述符是一样的,后 序的操作都有用到它,把它作为参数,通过它来进行一些读...
2018-09-04 17:51:33 197
转载 一个通用的Makefile(转载)
转载于 : http://www.cnblogs.com/lidabo/p/4521123.html一 makefile的作用 Makefile是用于自动编译和链接的,一个工程有很多文件组成,每一个文件的改变都会导致工程的重新链接,但是不是所有的文件都需要重新编译,Makefile中记录有文件的信 息,在make时会决定在链接的时候需要重新编译哪些文件。Makefile的宗旨就是:让...
2018-08-04 18:14:26 634
原创 uboot之uboot中的硬件驱动
一、uboot和linux驱动 1、uboot本身是裸机程序,裸机程序是没有驱动概念的 2、裸机程序是直接操控硬件的,操作系统中必须通过驱动来操控硬件。这两个的区别在于分层。 3、uboot的虚拟地址对硬件操作的影响 (1)、操作系统(linux)下MMU肯定是开启的,也就是说linux驱动中肯定都使用的是虚拟地址。而纯裸机中根 本不会开MMU,全部使...
2018-05-28 08:54:35 2797
原创 uboot之uboot中环境变量
一、环境变量基础 1、环境变量的作用 让我们可以不用修改uboot的源代码,而是通过修改环境变量来影响uboot运行时的一些数据和特性。譬如说通过 修改bootdelay环境变量就可以更改系统开机自动启动时倒数的秒数。 2、环境变量优先级 (1)uboot代码当中有一个值,环境变量中也有一个值。uboot程序实际运行时规则是:如果环境变量为空则...
2018-05-25 12:54:03 2907
原创 uboot之uboot的命令体系
一、uboot命令的使用: 1、uboot启动进入命令环境下,在此输入命令按回车结束,uboot会收取这个命令然后解析,然后执行。 2、uboot命令体系的实现代码uboot/common/cmd_xxx.c中。有若干个.c文件和命令体系有关。 3、每一个uboot的命令背后都对应一个函数。这就是uboot实现命令体系的一种思路和方法。 4、有些命令还支持传递参数。也就是说...
2018-05-24 20:21:29 800
原创 uboot之内核的启动
一、uboot和内核到底是什么? uboot的本质就是一个复杂点的裸机程序。 操作系统内核在本质上也是一个裸机程序,和uboot、和其他裸机程序并没有本质区别。 区别就是操作系统运行起来后在软件上分为内核层和应用层,分层后两层的权限是不同的,内存访问和设备上更加精细 (内核可以随便访问各种硬件,而应用程序只能访问限制的硬件和内存地址)。二、部署在SD卡中特定分区内 1、...
2018-05-22 13:50:56 420
原创 uboot启动之uboot第二阶段(BL2)
uboot第二阶段分析主要是start_armboot的分析一、这个函数是uboot/lib_arm/board.c的444行开始到908行结束。 1、首先分析一下uboot第二阶段应该做些什么? (1)、第一阶段主要初始化SoC内部的一些部件(看门狗,时钟等) (2)、uboot第二阶段就是初始化剩下的还没被初始的硬件。(譬如iNand,网卡芯片....)、ub...
2018-05-21 11:55:34 1835 1
原创 uboot之uboot第一阶段(BL1)
一、u-boot.lds中的start.S 1、在c语言中整个项目的入口就是main函数(这是c语言规定的),所以譬如说一个10000个.c文件的项目, 第一个分析的文件就是main函数的文件。 2、uboot中因为有汇编阶段的参与,因此不能直接找到main.c。整个程序的入口取决于链接脚本ENTRY (_start)因此_start符号所在的文件就是整个程序的...
2018-05-20 16:08:45 1325
原创 uboot之Makefile分析
一、uboot主Makefile分析VERSION = 1PATCHLEVEL = 3SUBLEVEL = 4EXTRAVERSION =U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)VERSION_FILE = $(obj)include/version_autogenerated.hHOST...
2018-05-19 17:41:23 1174
原创 uboot之uboot编译实践和内部目录介绍
编译实践 一、关于uboot的源码编译生成uboot.bin 1、我用的是朱有鹏老师的课程所以我有官方已经移植好的uboot源码所以我只是讲一下 uboot编译的过程和结果。(这是源码解压包的名称 qt_x210v3_130807.tar.bz2) ...
2018-05-17 22:36:25 830
原创 uboot基础之shell和makefile
shell篇一、shell介绍 1、shell是操作系统的终端命令行,shell可以理解为软件系统提供给用户操的命令行界面,可以说它是人机交互的 一种方式。 2、我们可以使用系统本身带的shell和操作系统,uboot等软件系统进行交互。具体就是通过shell提供的命令行设 置,输入...
2018-05-17 19:32:01 265
原创 初识uboot
这些关于uboot的分析全是我通过对朱老师物联网大讲堂知识的总结一、什么是uboot 要了解uboot的作用就要了解嵌入式设备(有系统的不是裸机)的启动过程,这里我们以S5pv210为 例来说说启动过程我之前写了一篇博客是关于S5pv210启动的https://mp.csdn.net/postedit/80296568, 在这里我简单的说一说大概的启动过程: (1)...
2018-05-17 13:33:17 268
原创 ARM之S5pv210的USB刷机
我所写的关于S5pv210的一切只是都是基于朱有鹏老师的物联网教程。一、什么是刷系统 刷系统就是利用刷机工具,向开发板中烧录预先编译好的镜像系统,使之在开发板上运行起来。二、准备工作 1、使用SecureCRT从网盘下载SecureCRT.rar,解压后直接使用。注册时参考解压包中的《说明.txt》。打开SecureCRT.exe后,建立一个Serial连接,开始监视串口。设置...
2018-05-16 18:07:22 558
原创 ARM之S5pv210触摸屏
一、输入类设备简介 1、input/output IO输入输出,是计算机系统中的一个概念。计算机的主要功能就是从外部获取数据然后进行计算加工的到输出数据并输出 给外部(计算机可以看成数据处理器)。计算机和外部交互就是通过IO。每一台计算机都有个标准输入和标准输出。 2、常见输入类设备 键盘、鼠标、触摸屏、游戏摇杆、传感器、(摄像头并不是一个典型的输入类...
2018-05-16 13:33:30 847
原创 ARM之S5pv210的LCD控制
一、LCD简介 1、LCD(Liquid Crystal Display)俗称液晶 2、液晶是一种材料,这种材料具有一种特点:可以在电信号的驱动下液晶分子进行旋转,旋转时会影响透光性,因此 我们可以在整个液晶面板后面用白光照(称为背光),可以通过不同电信号让液晶分子进行选择性的透光,此时 晶面板前面看到的就是各种各样不同的颜色,这就是LCD显示。 ...
2018-05-15 20:38:01 748
原创 ARM之S5pv210的按键和中断部分
一、按键和中断分析 要使用中断,首先要做好两个部分的工作:CPU中断的初始化和相应器件的中断的初始化。 CPU中断初始化:就是要设置号CPU有关中断的东西。 相关器件的中断初始化:例如按键,就要设置好按键,就触发中断。 (1)、先看看按键的原理图 从上图我们可以得知:按键是接在EINT2和EINT3处,还有KP_COL0-3,一共是6个按键。 ...
2018-05-15 00:06:00 629
原创 ARM之S5pv210串口通信初始化
一、串口通信的基础 1、串口通信(UART)的全称是:Universal Asynchronous Receiver /Transmitter(通用异步接收和发送) 2、异步通信和同步通信: (1)、异步通信: 发送方和接收方是工作在两个不同的时钟频率上的,也就是接收方有自己工作时的时钟频率,发 ...
2018-05-14 22:21:39 614
原创 ARM之重定位和链接脚本
一、重定位 1、静态重定位:静态重定位是在程序执行之前进行重定位,它根据装配模块将要装入的内存起始 位置,直接修改装配模块的有关使用地址的指令。 2、动态重定位:动态重定位是指,不是在程序执行之前而是在程序执行过程中进行地址重定位。更确 切地说,是在每次访问内存单元前才进行地址变换。动态重定位可是装配模块不加任何修改而装入内 存...
2018-05-14 16:52:42 1769
原创 ARM之S5pv210的时钟
一、时钟域 S5pv210一共有三个时钟域:MSYS,DSYS,PSYS MSYS: (Main System)主时钟,包括CPU,DDR内存条,IROM和IRAM等 DSYS: (Display System)显示时钟,就是一般和视频有关的的就在这个时钟域中,如HDMI,TVENC PSYS: (Peripheral System)外围时钟,就是...
2018-05-14 10:53:30 274
原创 ARM之S5pv210关看门狗
一、什么是看门狗? 看门狗本身是一个定时器,如果你在定时器完成之前未重置计时器的值那么它就会重启整个系统。但是我们 系统正常运行下并不希望他重启,所以就需要“喂狗“这个操作(即每次定时结束之前给定时器值重置)。二、什么时候会用到看门狗? 假设我们将一些设备放在环境恶劣的情况下,如果设备出现了问题可能需要一个复位就好了,这时候人不可 能再去一次这种地方去复位它,这时候你要是开...
2018-05-14 09:30:08 460
原创 ARM之S5pv210的亮灯实验
第一我在此强调的是,要学会根据原理图和相关的手册实现基本功能,主要学习这个过程。正文: 第一步:先看原理图了解LED是和哪个管脚连接的,然后我们才能通过操作寄存器的方式 控制管脚,进而控制LED 通过原理图可知:要想将LED点亮,只需要将GPJ0端设置为低电平,并且为输出状态 就可以了,这里我们只设置前...
2018-05-13 22:56:20 925
原创 ARM之ARM汇编
一、指令和伪指令 汇编指令是CPU机器指令的助记符,经过编译后会得到一串10组成的机器码,可以 由CPU读取执行。 汇编伪指令本质上不是指令(只是和指令一起写在代码中),它是编译器环境提供 的,目的是用来指导编译过程,经过编译后伪指令不会生成机器码。二、两种不同风格的ARM指令 1、ARM官方的ARM汇编风格:指令一般用的小、windows中IDE开发环境如:LDR ...
2018-05-13 20:50:55 271
原创 ARM之S5pv210启动详解
一、210内置了96kb大小的SRAM(叫iRAM)和64kb大小的Norflash(叫iROM)二、启动过程 1、CPU上电后先从内部iROM中读取预先设置的代码BL0到iRAM中执行。该段IROM代码首先执行基本初始化CPU (CPU时钟,关看门狗,初始化设备拷贝参数......)(该段代码是三星出厂前设置的,三星也不知道我们板子上 将来会接什么样的DRAM和...
2018-05-13 08:04:58 726
原创 ARM之指令对CPU的意义
一、汇编语言与C等高级语言的差异 1、汇编难写,C好写 2、汇编无可移植性,C语言有一定可移植性,JAVA等高级语言的可移植性更强。 3、汇编语言效率最高,C语言次之,JAVA等更高级语言效率更低。 4、汇编不适合完成大型复杂的项目,更高级语言更适合完成更大、更复杂的项目。二、汇编语言的本质 1、汇编的实质是机器指令(机器码)的助记符,是一种低级符号语言 2、机...
2018-05-12 17:08:10 164
原创 ARM之可编程器件的原理
一、可编程器件的特点 1、CPU在固定频率的时钟控制下节奏运行。 2、CPU可以通过总线读取外部存储设备中二进制指令集,然后解码执行。 3、这些可以被CPU解码执行的二进制指令集是CPU设计的时候确定的,是CPU的设计者 (ARM公司)定义的,本质上是一串由1和0组成的数字。这就是CPU汇编指令集。二、整个编程及运行过程 1、 程序员用汇编指令编程-->经...
2018-05-12 16:50:37 2464
原创 ARM之CPU设计原理
一、示意图 二、具体介绍 地址总线和数据总线: CPU通过地址总线寻址,然后通过数据总线与外部设备互换信息。 地址总线的位数决定CPU寻址的范围(即内存大小),数据总线的位数决定CPU单次通信能交换的信息数量。 总线速度决定CPU和外设互换信息的速度。注意: CPU的地址总线和数据总线可以不同(典型代表就是51单片机),但是一般都相同。 CPU的位数指的是...
2018-05-12 16:29:19 2658
原创 ARM之交叉编译
以下是根据朱有鹏老师的物联网课程写的两种开发模式: 非嵌入式开发:在A机编写源代码,编译得到可执行程序,发布给A机运行 嵌入式开发:在A机编写源代码,编译的到可执行程序,发布给B机执行 (我们所说的交叉编译便是第二种)为何使用交叉编译: 嵌入式开发的CPU比较简单,本身无法搭建开发环境,有些甚至操作系统都没有 交叉编译可以用高性能机器为低性能机器开发软件(包括裸机软件、系...
2018-05-12 16:14:37 373
原创 ARM之嵌入式系统的特点
以下内容是根据朱有朋老师的物联网教学视频及课件写的:一、嵌入式系统的特点 1、专用,软硬件可裁剪可配置 2、低功耗、高可靠性、高稳定性 3、软件代码短小精悍 4、代码可固化 5、实时性 6、弱交互性 7、专用开发工具及开发环境 8、专业开发人员二、嵌入式系统的组成 硬件: 微处理器、存储器、I/O接口、输入输出设备等等。 软...
2018-05-12 16:00:35 1500
原创 数据结构之队列
一、定义 队列也叫FIFO(first in first out),队列是一种常用的数据结构其特性和栈恰好相反,它是先进先出的, 关于它的两个重要操作为入队和出队,其只能在头部和尾部进行操作,而其中能在头部尾部进行入队,出 队操作的为双端队列。二、使用 在这里我还是用链式存储结构对一般队列进行实现,并实现其主要API。 ...
2018-05-11 17:34:40 125
原创 数据结构之栈
一、定义 栈(FILO)是一种特殊的数据结构,它的特性是只能在栈顶通过push的方法来存放数据,也只能通过pop这种操作来 弹出栈顶数据,它的这种结构也就决定了它是先进后出的这与队列刚好相反。二、使用 栈的操作就是入栈,出栈。下面我用链式存储结构来实现栈,还有它的一些API。typedef int SeqType;typedef struct Node//定义数据节点 {...
2018-05-11 07:27:57 279
原创 数据结构之链表
一、定义 链表是一种常用的数据结构,而且我后面栈和FIFO也是用链表结构实现的,所以你必须得对 链表非常熟悉。它的查找时间复杂度为O(n),而它的插入复杂度为O(1),所以当你的数据不 断的变化时...
2018-05-10 20:37:42 116
原创 数据结构之顺序表
一、定义 顺序表是一种常用的数据结构,它把数据挨个存放在指定的空间中。其查找的时间复杂度为O(1) 其插入或者删除复杂度为O(n)。二、使用 接下来我用动态分配内存的方法实现了顺序表及一些API#define Maxsize 10//表长度的初始定义 typedef int SeqType;//存储类型为SeqType(现在为int型)typedef struct { ...
2018-05-10 19:34:48 148
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人