- 博客(39)
- 收藏
- 关注
原创 2-27 shell脚本编程
(本节笔记的实验代码,在这里)1. 基本概念 脚本是一个包含一系列命令序列的文本文件。当运行该脚本文件时,文件中包含的命令序列将得到自动执行。 2. 脚本编程技术 2.1 基本结构『 #!/bin/sh ......
2016-09-20 10:19:06 281
原创 2-26 守护进程程序设计
(本节笔记的实验代码,在这里)1. 基本概念 守护进程,也就是daemon(精灵)进程,是Linux中的一种服务进程。守护进程具有以下特点: 1.1 不占用控制终端,守护进程都在后台运行。([root]#./app &) 1.2 独立于控制终端。一般进程有对应的TTY(如PTS/8),但守护进程没有对应的控制终端,ps aux命令查看守护进程
2016-09-20 10:12:25 355
原创 2-25 并发服务器程序设计
(本节笔记的实验代码,在这里)1. 并发服务器程序设计原因 采用轮询方式接收来自客户端的连接请求,服务器端只能按顺序处理数个客户端的连接请求,也就是只能处理完A客户端的连接和数据收发后,才能按顺序继续处理B和C的客户端的请求。2. 改善方法 服务器端采用多进程或多线程的方式,来同时并发处理来自多个客户端的连接请求。(若是TCP采用多进程方
2016-09-20 10:05:35 302
原创 2-24 UDP网络程序设计
(本节笔记的实验代码,在这里)1. UDP编程模型函数化 1.1 server端函数 创建socket——>socket(); 绑定地址 ——>bind(); 接收数据 ——>recvfrom(); 发送数据 ——>sendto(); 结束连接 ——>close();
2016-09-14 11:30:33 284
原创 2-23 TCP网络程序设计
1. TCP编程模型函数化 1.1 server端函数 创建socket——>socket(); 绑定地址 ——>bind(); 监听端口 ——>listen(); 等待连接 ——>accept();
2016-09-14 10:54:04 380
原创 2-22 网络协议分析及Linux网络编程模型
1. Linux网络模型/* 网卡驱动在OSI模型中属于数据链路层,在TCP/IP中属于网络接口层 */2. 协议分析 2.1以太网协议中协议和协议之间的关系 网络协议包含: 1. 多条规则 2. 数据包的格式
2016-09-14 10:33:08 465
原创 2-21 多线程同步编程
(本节笔记的实验代码,在这里)1. 基本概念 多个线程按照规定的顺序来执行,即为线程同步。 2. 条件变量函数学习 2.1 初始化条件变量 函数名: pthread_cond_init 函数原型: man pthread_cond_init
2016-09-14 09:48:57 244
原创 2-20 多线程程序设计
1. 线程基本概念 线程与创建它的进程共享代码段和数据段,并拥有自己独立的栈,是“轻量级”的进程。 2. 函数学习 2.1 创建线程 函数名: pthread_create 函数原型: man pthread_create intpthread_c
2016-09-14 09:07:45 319
原创 2-19 消息队列通信
(本节笔记的实验代码,在这里)1. 基本概念 消息队列是一个消息链表,每一条消息可看作一个记录,具有一定的格式的结构(struct)。一个进程向队列添加新消息,另一些进程可以从队列中读走消息,消息读走好就消失了。因此消息队列通讯作为IPC(进程间通信)存在。2. 函数学习 2.1 创建/打开消息队列 函数名:
2016-09-14 08:39:45 245
原创 2-18 共享内存通信
(本节笔记的实验代码,在这里)1. 基本概念 共享内存是IPC机制中的一种,作用是使得两个不相关的进程访问同一段内存,是一种进程间传输数据的一种有效方式。 2. 函数学习 2.1 创建/获取共享内存 函数名: shmget 函数原型: man shmget
2016-09-13 20:37:19 282
原创 2-17 信号同步编程
(本节笔记的实验代码,在这里)1. 基本概念: 进程间的同步是指一组并发进程进行互相合作,互相等待,使得各进程按照一定的顺序执行的过程。2. 生产者与消费者问题 2.1 信号量sem_val初始值设为0 2.2 生产者每生产好一件产品,就sem_val + 1(释放信号量) 2.3 消费者开始因sem_val = 0而阻塞,
2016-09-13 20:01:30 260
原创 2-16 信号量互斥编程
(本节笔记的实验代码,在这里)1. 信号量 1.1 基本概念:主要用于保护临界资源(进程互斥),进程可以根据此判定是否能够访问某些共享资源。除了用于访问控制以外,还可用于进程间的同步。 1.2 分类:第一种是二值信号,只能取0或1;第二种是计算信号量,可取任意非负值。2. 函数学习 2.1 创建信号量集合 函数名:
2016-09-13 19:19:01 254
原创 2-15 信号通信编程
(具体的实验代码,在这里)1. 基础理论 1.1 信号(signal):进程最古老的通信方式———————————————————| 进程A/内核 | 进程B || 1.选择信号 |
2016-09-13 16:37:44 283
原创 2-14 有名管道通信
(本节笔记的实验代码可参考这里,不过,应该再可以优化一下,好像有bug)1. 有名管道的基本概念——FIFO文件,可用open,read,write等操作方式。2. 与普通的文件的区别: 读取FIFO文件的进程只能以“RDONLY”方式打开FIFO文; 写FIFO文件的进程只能以“WRONLY”方式打开FIFO文件; FIF
2016-09-13 15:03:45 392
原创 2-13 无名管道通信
1. Linux中进程间通信(IPC:Inter-Process Communication ) 基本原理 1.1 作用: 数据传输,一个进程需要把数据发送到另一个进程。 资源共享,多个进程共享同样的资源。 通知事情,一个进程需要向另一个(组)进程发送消息,通知它们发生了某件事(例如生产者消费者) 进程控制
2016-09-13 11:13:10 311
原创 2-12 多进程程序设计
(本节笔记接上一节的进程控制,继续学习多进程的程序设计函数,详细的实验代码在这里)1. 创建进程 函数名: fork 函数原型: pid_t fork ( void ); 函数功能: 创建一个子进程
2016-09-13 09:36:48 433
原创 2-11 进程控制理论
1. 进程的概念:一个具有独立功能的程序的一次运行。 程序的概念:存放在存储器中的一段代码2. 进程的特点:动态性、并发性、独立性、异步性3. 进程的状态:4. 进程的ID(PID):标示进程的唯一数字 父进程ID(PPID) 启动进程的用户ID(UID)5. 进程的互斥 当有若干进程都要使用某一资源时,因一
2016-09-13 09:35:21 255
原创 2-10 时间编程
1. 基本概念——时间类型 UTC:Coordinated Universal Time(世界标准时间) GMT:Greenwich Mean Time(格林威治标准时间) Calendar Time:日历时间:从1970年1月1日0时0分0秒到现在所经历的秒数总和。2. 函数学习 2.1 获取日历时间 函数名:
2016-09-12 18:46:09 217
原创 2-9 库函数调用方式文件编程
1. 基本概念 1.1 ——C库函数 独立于具体的操作系统,无论是在Linux、Windows或其他OS都能使用C库函数,提高了程序的移植性。 1.2 ——流 系统(程序)对文件(内存、网络连接或某个设备)进行数据的读写操作。 1.3 ——文件指针 类似于系统调用中的文件描述符FD,在库函数中使用FILE类
2016-09-12 08:07:31 512
原创 2-8 系统调用方式的文件编程
1. 基本理论 在Linux中,所有打开的文件对应一个数字,该数字由系统自动分配,称为文件描述符。2. 文件操作 2.1 打开文件 函数名: open 函数原型: int open (const char *pathname, int flags);
2016-09-09 10:30:46 387
原创 2-6 静态函数库和动态函数库的建立
1. 函数库 Linux应用程序设计中,用到的外部函数主要由函数库和系统调用提供,函数库按照链接方式的不同,可分为静态链接库和动态链接库两种。2. 区别 静态链接库:在程序编译时,把库一起链接进程序,最后生成的可执行文件体积变大,但以后就不需要外部提供这个库,切运行速度更快。 动态函数库:在编译时不链接,在程序运行时才把动态库加
2016-09-09 10:05:09 331
原创 2-5 Linux编程规范
1. 文件头,如/*************************************** 文件名: addr.c ** 创建者: xyz ** 创建时间:20150606 ** 程序说明:打印
2016-09-09 09:34:50 245
原创 2-4 Linux应用程序地址分析
Linux应用程序在内存中包括几个段,分别是:代码段、数据段、bss断、堆(heap)和栈(stack)(涉及到链接器脚本,参考 1-1-4 链接器脚本)(一下的地址布局分析是针对32bit系统)1. 地址布局 1.1 从低地址到高地址,分别是:代码段、数据段、bss段和堆栈 1.2 堆向内存高地址生长,栈向内存低地址生长2. 查看范例程序地址分布的
2016-09-09 07:58:38 175
原创 2-3 Coredump程序故障分析
1. 定义:核心转存,当程序运行过程中发生异常时,Linux把程序出错时的内存内容存储在一个Core文件中。2. 处理对象:Segment fault(段错误)3. 产生原因:数组访问越界、访问空指针、栈溢出、修改只读内存等4. 用法:先打开ulimit -c unlimited 这个选项如果打开了,就有可能产生大量的文件,因此默认状态下是关闭的
2016-09-08 21:33:05 300
原创 1-17 触摸屏原理及基于S3C2440的代码实现
(本节笔记的实验代码,在这里:https://github.com/elvinsys/arm_tq2440/tree/master/1_uboot/1-17.touchscreen)一、 原理解析 1. 分类:电阻式、电容式、红外线技术、表面声波技术、矢量压力传感技术;现代主要用到电阻式和电容式两种触摸屏。 2. 电阻屏工作原理: 当手指触屏是,两
2016-09-08 19:58:07 658
原创 1-16 LCD的原理与应用
一、 LCD的工作原理解析 1. LCD硬件体系结构 1.1 液晶的概念 属于一种有机化合物,分子形态为长棒状,在不同的电流作用下,分子会做有规律的旋转,对光线产生一定的控制形成一个像素,而多个像素构成完整的图像。 1.2 分类:STN、GF、TFD、还有常用的TFT 1.3 LCD驱动芯片
2016-09-08 14:56:44 501
原创 1-15 DMA的原理和应用
(详细的实验代码,请参看https://github.com/elvinsys/arm_tq2440/tree/master/1_uboot/1-15.dma)一、 DMA原理分析 1. DMA(Direct Memory Access)直接内存存储,用于内存到内存,或者内存到外设(接口、芯片寄存器等) 2. DMA控制器:2440为4通道;6410为四控制器,每个控
2016-09-08 14:25:43 465
原创 1-14 串口在S3C2440上的原理、配置与驱动实现
一、 基本概念 1. 作用:作为数据传输的途径,或者作为控制台来提供用户对设备的控制方式 2. 通讯格式的几个概念 2.1 波特率:每秒传输bit的个数,常用的波特率有38400/115200 2.2 常用的参数: 起始位:当线路空闲时,电平为高,一旦检测到一个下降沿,则视为一个起始位
2016-09-08 08:12:02 1113
原创 1-13 NandFlash的原理与实践
一、 NandFlash的原理解析 1. NandFlash一般充当的是嵌入式系统中存放数据的“硬盘”的角色。 2. 分类 SLC(Single Level Cell):单层式存储,在存储格上只存放一位数据 MLC(Multe Level Cell) :多层式存储,在存储格上则能存放两位数据 3. SLC与MLC的对比
2016-09-07 18:40:03 558
原创 1-12 S3C2440中断的原理与实践
一、 中断处理流程 1. CPU工作过程中,需要与外设进行交互的方式分为: 轮询方式:CPU不断地查询设备的状态,该方式实现简单,但CPU利用率低,而且不适合多任务系统。 中断方式:CPU告知硬件开始一项工作后,就去做别的事了,当硬件王城该项工作后,像CPU发送一个信号。 2. 中断的生命周期 2.1 中断信号的产生
2016-09-07 16:07:32 622
原创 1-11 MMU在U-boot中的配置与实现
一、 MMU的功能解析作用 1. 将虚拟地址转化为物理地址 2. 访问权限的管理二、 关于MMU的地址转换 1. 地址转化的原理和转换过程(可参看ARM920T手册 Memory Management Unit一节) 三、 MMU的配置与使用 1. 以使用段式转换为例,可将步骤分解为: 1.1 建立一
2016-09-07 15:24:39 437
原创 1-10 C语言环境初始化与建立
详细的实验代码请查看:https://github.com/elvinsys/arm_tq2440/blob/master/1_uboot/1-5._start/start.S一、 堆栈初始化 1. 栈,是一种具有“后进先出”性质的数据组织方式 栈底,第一个进栈的数据所处的位置 栈顶,最后一个进栈的数据所处的位置
2016-09-06 17:37:48 712
原创 1-9 S3C2440启动流程实现
详细的实验代码请查看:https://github.com/elvinsys/arm_tq2440/blob/master/1_uboot/1-5._start/start.S一、 代码搬运的流程(从作为stepping stone的SRAM开始) 1. 起点(SRAM,0x0000 0000, 4K) 2. 终点(内存, BANK6, 0x3000 00
2016-09-06 17:28:55 287
原创 1-8 内存的概念、分类、初始化方法
详细的实验代码请查看:https://github.com/elvinsys/arm_tq2440/blob/master/1_uboot/1-5._start/start.S一、 分类 主要分为:DRAM——小电容充电,需要不断刷新数据,速度慢;SRAM——不需要刷新,速度快名单功耗大,成本高(stepping stone为4K的SRAM) DRAM
2016-09-06 15:33:05 977
原创 1-7 2440时钟初探
一、 概念解析 1. 时钟脉冲信号:按照一定的电压富都,一定的时间间隔连续发出的脉冲信号,是时序逻辑的基础。 2. 时钟脉冲频率:一秒钟内产生的时钟脉冲个数(Hz)。 3. 信号产生源: 3.1 晶振:晶体振荡器,也就是石英晶体经切割、镀上电极后加电。 优点:结构简单、噪声低。缺点:频率越高,价格越高,交货期长
2016-09-06 15:21:17 399
原创 1-6 S3C2440的GPIO初探
(可参考2440芯片手册第九节 I/O Ports)一、 基础概念 GPIO(General-Purpose Input / Output Ports),通用输入输出端口,通过控制I/O口的寄存器,从而控制引脚的输入输出功能。一般控制两个寄存器,分别是: 控制寄存器GPXCON : 主要是对引脚的功能设置,如INT, OUTPUT, INPUT等
2016-09-06 11:44:59 247
原创 1-5 核心初始化
1. 设置中断向量表(可参考《ARM Architecture Reference Manual -A2.6》) 1.1 异常(Exceptions)的概念:因为内部或外部的一些事件,导致处理器停下正在处理的工作,转而去处理发生的事情。 1.2 种类 Mode Ad
2016-09-06 09:17:46 334
原创 1-4 bootloader初探
一、 bootloader简介 1. bootloader相当于台式机的BIOS,用来在操作系统启动前对硬件进行初始化以及自检,然后把控制权交给操作系统。 嵌入式操作系统的启动流程一般是bootloader->boot parameters->kernel->rootfilesystem 2. 其设计方法可参考U-BOOT,U-
2016-09-05 11:22:31 382
原创 2-2 关于gdb的使用
在调试时遇到的一些奇怪的问题:1. 在用gdb调试程序的时候,有时候打印变量时,会出现的情况,可在编译的时候加上-O0选项。gcc默认用-O2进行优化编译,用-O0告诉编译器不进行优化,在调试的时候才能正常显示变量的值。当然在产品发布的时候应该去除-g和-O0选项。
2016-09-02 15:14:47 218
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人