在路上...

The development of life
我们一直都在努力,有您的支持,将走得更远...

站内搜索: Google

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

09 2009 档案

摘要:wait是Object类的方法,sleep与yield都是Thread类的方法。wait调用的时候需要注意的是该方法是释放锁标志的,而sleep在调用的时候是紧紧抱着锁标志的,也就是等他完全执行完成了才可以让其他线程来访问的sleep 方法使当前运行中的线程睡眼一段时间,进入不可运行状态,这段时间的长短是由程序设定的,yield 方法使当前线程让出 CPU 占有权,但让出的时间是不可设定的。实际上... 阅读全文
posted @ 2009-09-17 16:44 palam 阅读(575) 评论(0) 推荐(0)

摘要:多线程中,线程需要暂停的原因多种多样,基本分为两大类,1是等待数据,2是系统资源紧张,停止计算以把资源让给其他线程.一般初学者会使用的方法就是使用SuspendThread和ResumeThread这两个API或者他们的包装函数进行操作,许多教材上都是这么说的,但这么作会带来及其严重的问题。 阅读全文
posted @ 2009-09-17 16:42 palam 阅读(2138) 评论(0) 推荐(0)

摘要:名称:sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型:Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );int scanf( const char *format [,argument]... ); 说明:sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者... 阅读全文
posted @ 2009-09-06 23:33 palam 阅读(275) 评论(0) 推荐(0)

摘要://led.c#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/ioctl.h>int main(int argc, char **argv){int on;int led_no;int fd;/* 检查led控制的两个参数,如果没有参数输入则退出。*/if (... 阅读全文
posted @ 2009-09-06 23:32 palam 阅读(391) 评论(0) 推荐(0)

摘要:这两个功能的实现都是通过设置启动脚本来实现的。启动脚本的一般存放路径是 /etc/init.d/rcS (rcS即脚本文件),自启动应用程序一般放置于 /etc/rc.d/init.d 目录下。 我们需要用vi命令对rcS进行编辑,当然也可以通过其他方式对其进行覆盖。 在脚本中自启动应用程序示例:#各种服务程序/etc/rc.d/init.d/netd start #telnet/ftp 服务/e... 阅读全文
posted @ 2009-09-06 23:30 palam 阅读(3268) 评论(0) 推荐(0)

摘要:最近在做一个移植UCOS-II的任务,遇到了semihosting的问题,现在把这个问题的解决办法总结一下。 Step 1 : 用#pragma import(__use_no_semihosting_swi)保证用户程序不调用semihostSWI; 此后,link时会有 Error :L6200E:Symbol __semihosting_swi_guard multiply defined ... 阅读全文
posted @ 2009-09-06 23:29 palam 阅读(1030) 评论(0) 推荐(0)

摘要:与传统的4/8位单片机相比,ARM的性能和处理能力当然是遥遥领先的,但与之相应,ARM的系统设计复杂度和难度,较之传统的设计方法也大大提升了。本文旨在通过讨论系统程序设计中的几个基本方面,来说明基于ARM的嵌入式系统程序开发的一些特点,并提出和解决了一些常见的问题。  本文分成几个相对独立的专题陆续刊载。  (一) 嵌入式程序开发基本概念  (二) 系统的初始化过程  (三) 如何满足嵌入式系统的... 阅读全文
posted @ 2009-09-06 23:28 palam 阅读(744) 评论(0) 推荐(0)

摘要:Devfs,也叫设备文件系统(Device Filesystem),设计它的唯一目的就是提供一个新的(更理性的)方式管理通常位于 /dev 的所有块设备和字符设备。您也许知道,典型的 /dev 树包含数百个块特殊文件和字符特殊文件,它们全都在根文件系统上。每个特殊文件都可以让用户空间进程轻松地与内核设备实现交互。举例来说,通过对这些特殊文件执行操作,您的 X 服务器就能够访问视频硬件, fsck 可以执行文件系统检验, lpd 可以通过并行端口向打印机发送数据。 阅读全文
posted @ 2009-09-06 23:28 palam 阅读(346) 评论(0) 推荐(0)

摘要://4led.c#include <linux/config.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/miscdevice.h>#include <linux/sched.h>#incl... 阅读全文
posted @ 2009-09-06 23:27 palam 阅读(272) 评论(0) 推荐(0)

摘要:2.4内核引入优点:设备初始化时在/dev下创建设备文件,卸载时候删除可以指定设备名,所有者,权位,可以不需要分配主设备号static devfs_handle_t devfs_handle;static int __init xxx_init(void){int ret;int i;ret = register_chrdev(XXX_MAJOR,DEVICE_NAME, &xxx_fop... 阅读全文
posted @ 2009-09-06 23:25 palam 阅读(381) 评论(0) 推荐(0)

摘要:USB规范定义function 为主机提供单个功能的设备。 hub是一个包含有一个或多个到USB设备的接口或内部连接的设备。同时这个设备还带有使该设备能与每个外设通信的硬件设施。集线器重复接收通信,同时也有处理以下状况的能力;管理电源、发送和响应状态和控制消息以及防止全速数据输出到低速设备。 device是一个function(功能)或一个hub(集线器),除了复合设备(复合设备有一个集线器和一个... 阅读全文
posted @ 2009-09-06 23:24 palam 阅读(535) 评论(0) 推荐(0)

摘要:clock部分比较容易,现在按照datasheet的思路梳理一下。 一、对clock的基本认识 第七部分是“clock & power management”,总结如下: 1 s3c2410的clock & power management模块包含三个部分:clock control、usb control、power control。现在的关注点是cl... 阅读全文
posted @ 2009-09-06 23:24 palam 阅读(511) 评论(0) 推荐(0)

摘要:一、typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像:typedef int INT;typedef int ARRAY[10];typedef (int*) pINT; typedef可以增强程序的可读性,以及标识符的灵活性,但它也有“非直观性”等缺点。二、#define... 阅读全文
posted @ 2009-09-06 23:23 palam 阅读(233) 评论(0) 推荐(0)

摘要:U32 downloadAddress = 0; void main(void){ void (*startp)(void); //定义一个函数指针 startp = (void (*)(void))downloadAddress; //把一个32位的数转换成指针,且指针类型为函数指针。然后把这个指针付给; 前面定义好的函数指针 (*startp)(); //用函数指针执行指定地址的代码} 阅读全文
posted @ 2009-09-06 23:19 palam 阅读(274) 评论(0) 推荐(0)

摘要:在 ARM 汇编语言程序里,有一些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,这些伪指令仅在汇编过程中起作用,一旦汇编结束,伪指令的使命就完成。 阅读全文
posted @ 2009-09-06 23:13 palam 阅读(378) 评论(0) 推荐(0)

摘要:在这一章里将提供三个范例来说明如何使用 µC/OS-II。笔者之所以在本书一开始就写这一章是为了让读者尽快开始使用 µC/OS-II。在开始讲述这些例子之前,笔者想先说明一些在这本书里的约定。 阅读全文
posted @ 2009-09-06 23:10 palam 阅读(1483) 评论(0) 推荐(1)

摘要:在进入正题之前,我想先把ARM920T的异常向量表(Exception Vectors)做一个简短的介绍。:]ARM920T的异常向量表有两种存放方式,一种是低端存放(从0x00000000处开始存放),另一种是高端存放(从0xfff000000处开始存放)。关于为什么要分两种方式进行存放这点我将在介绍MMU的文章中进行说明,本文采用低端模式。ARM920T能处理有8个异常,他们分别是:Reset... 阅读全文
posted @ 2009-09-06 22:48 palam 阅读(322) 评论(0) 推荐(0)

摘要:MMU,全称Memory Manage Unit, 中文名——存储器管理单元。 阅读全文
posted @ 2009-09-06 22:45 palam 阅读(256) 评论(0) 推荐(0)

摘要:register i = rEP3_DMA_CON; for(i=0;i<10;i++);/* register是variable的一种存储类型,叫做寄存器型。一个变量要是被定义为这种类型,他就会被存储在通用寄存器中,所以存储速度快。这种类型的好处就是: 如果你需要频繁地使用该变量,可以避免多次从内存里进行存储,从而提高了运行效率.对编译器只是一种提示,是不是register还看编译器怎么... 阅读全文
posted @ 2009-09-02 23:16 palam 阅读(636) 评论(0) 推荐(0)

摘要:  多线程编程是一个很有意思也很有用的技术,使用多线程技术的网络蚂蚁是目前最常用的下载工具之一,使用多线程技术的grep比单线程的grep要快上几倍,类似的例子还有很多。希望大家能用多线程技术写出高效实用的好程序来 阅读全文
posted @ 2009-09-02 23:15 palam 阅读(286) 评论(0) 推荐(0)

摘要:/*守护进程实例子*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <fcntl.h>#include <sys/types.h>#include <unistd.h>#include <sys/wait.h>#define MAX... 阅读全文
posted @ 2009-09-02 23:13 palam 阅读(1052) 评论(0) 推荐(0)

摘要://守护进程的调试方法是通过linux的syslog即系统日志服务来实现的。程序运行信息将输入到"/var/log/messages"//系统日志文件中。syslogd的配置文件为/etc/syslog.conf。该机制提供了三个syslog函数分别为openlog/syslog/closelog//openlog:用于打开系统日志服务的一条连接//syslog:向日志文件中写入消息//close... 阅读全文
posted @ 2009-09-02 23:11 palam 阅读(751) 评论(0) 推荐(0)

摘要:本文出自:BBS水木清华站 作者:Mccartney (coolcat) (2002-01-29 20:28:07)3 使用同步对象来编程 本章定义了四种可用的同步类型,并且讨论实现同步的注意事项。 互斥锁(mutex) 条件变量(condition variable) 多读单写锁(multi-read,single-write lock) 信号量(semophore) 进程间同步(process... 阅读全文
posted @ 2009-09-02 23:11 palam 阅读(250) 评论(0) 推荐(0)

摘要:什么是Shell? shell是你(用户)和Linux(或者更准确的说,是你和Linux内核)之间的接口程序。你在提示符下输入的每个命令都由shell先解释然后传给Linux内核。 shell 是一个命令语言解释器(command-language interpreter)。拥有自己内建的 shell 命令集。此外,shell也能被系统中其他有效的Linux 实用程序和应用程序(utilitie... 阅读全文
posted @ 2009-09-02 23:09 palam 阅读(623) 评论(0) 推荐(0)

摘要:结合阻塞与非阻塞访问、poll函数可以较好地解决设备的读写,但是如果有了异步通知就更方便了。异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上"中断"地概念,比较准确的称谓是"信号驱动(SIGIO)的异步I/O"。  我们先来看一个使用信号驱动的例子,它通过signal(SIGIO, input_handler)对STDIN_FILEN... 阅读全文
posted @ 2009-09-02 23:08 palam 阅读(406) 评论(0) 推荐(0)

摘要:【fcntl系统调用】 功能描述:根据文件描述词来操作文件的特性。 用法: int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); 参数: fd:文件描述词。 cmd:操作命令。 arg:供命令使用的参数。 lock:同上。... 阅读全文
posted @ 2009-09-02 23:06 palam 阅读(8161) 评论(1) 推荐(0)

摘要:kpp.c---------------------------------------------#include <linux/kernel.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/slab.h>#include <linux/init.h>#in... 阅读全文
posted @ 2009-09-02 23:05 palam 阅读(1138) 评论(0) 推荐(0)

摘要:const char*, char const*, char*const的区别问题几乎是C++面试中每次都会有的题目。 事实上这个概念谁都有只是三种声明方式非常相似很容易记混。 Bjarne在他的The C++ Programming Language里面给出过一个助记的方法: 把一个声明从右向左读。 char * const cp; ( * 读成 pointer to cp is a cons... 阅读全文
posted @ 2009-09-02 23:04 palam 阅读(474) 评论(0) 推荐(0)

摘要:1.用 cat /proc/devices 可以查看当前已经使用的设备对应的主设备号 cat /proc/interrupts 查看记录那个设备在使用那个中断号 cat /proc/tty/drivers 可查看当前系统中所有tty设备的相关信息 arm-linux-gcc -v 2.在控制平台从用户到超级用户的切换命令 : su -root3.将bin目录添加到环境变量中去:export PA... 阅读全文
posted @ 2009-09-02 23:02 palam 阅读(263) 评论(0) 推荐(0)

摘要:tar.tar文件解压:首先用file命令查看文件类型(可能是bz2或者gz),命令格式:file filename.tar.tar我以MPlayer-0.91.tar.tar为例:[root@localhost ~]# file MPlayer-0.91.tar.tarMPlayer-0.91.tar.tar: bzip2 compressed data, block size = 900k由b... 阅读全文
posted @ 2009-09-02 23:01 palam 阅读(3971) 评论(0) 推荐(0)

摘要:先用$ gzip -dv *命令解压,然后用 $ tar xvf *命令解压,---------------安装6.21.1. 安装 Ncurses 1.准备编译 Ncurses : ./configure --prefix=/usr --with-shared --without-debug2.编译软件包:make这个软件包没有附带测试程序。3.安装软件包:make install4.赋予 nc... 阅读全文
posted @ 2009-09-02 22:05 palam 阅读(625) 评论(0) 推荐(0)

摘要:一、GPIO寄存器定义1.#define GPCON(x) __REG2(0x56000000, (x) * 0x10) 这句是定义2410的GPIO的控制寄存器,注意:__REG2的参数是寄存器的物理地址,这个物理地址经_REG2宏转换为虚拟地址,对照2410的手册可以得到一下对应关系:GPCON(1) ------ PORT A 0x56000000GPCON(2) ------ PORT B... 阅读全文
posted @ 2009-09-02 22:04 palam 阅读(544) 评论(0) 推荐(0)

摘要:软件准备:gcc-3.2.2-5.i386.rpm :用来编译ncurses-5.6.tar.gz:用来配合make menuconfig 命令配置内核bison-2.4.tar.gz :语法解析器flex-2.5.35.tar.bz2 :词法解析器m4-1.4.9.tar.gz: modutils-2.4.26.tar.bz2 : module-init-tools-3.2.2.tar.bz2:... 阅读全文
posted @ 2009-09-02 22:01 palam 阅读(342) 评论(0) 推荐(1)

摘要:0.包含头文件:#include <linux/timer.h>1.定义时间结构体变量:static struct timer_list kbd_timer;2.初始化时间结构体变量:init_timer(&kbd_timer);3.指定定时器超时服务函数:void kbd_timer_handler(unsigned long){...}kbd_timer.funciton ... 阅读全文
posted @ 2009-09-02 21:40 palam 阅读(660) 评论(0) 推荐(0)

摘要:一、linux保存环境变量的文件位于/etc/profile,当你打开此文件可以看到各种环境变量,,当然你可以直接在修改这个文件,保存后注销系统,然后再重新登陆,即会生效,二、下面介绍的是用命令的方式设置环境变量,这是linux的方便之处哦,个人认为,并不代表大多数人意见,主要命令:export,set,env;1.举个简单例子:# export JOHNSCC="Hello!" //格式: ex... 阅读全文
posted @ 2009-09-02 21:40 palam 阅读(344) 评论(0) 推荐(0)

摘要:va_list ap; //声明一个变量来转换参数列表 va_start(ap,fmt); //初始化变量 va_end(ap); //结束变量列表,和va_start成对使用 可以根据va_arg(ap,type)取出参数 已经经过调试成功的输出程序#include<stdio.h>#include <stdarg.h>#define bufsize 80char buf... 阅读全文
posted @ 2009-09-02 21:39 palam 阅读(800) 评论(0) 推荐(0)

摘要:ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。 RAM有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要... 阅读全文
posted @ 2009-09-02 21:37 palam 阅读(770) 评论(0) 推荐(0)

摘要:我所使用的内核是2.4.20-8。问题出现在request_irq后立即产生中断,分析后发现原因是上次的中断申请标志没有被清除所导致的。经过查看源代码(如代码段1.0)发现只有在 do_IRQ(……)函数中清除中断标志,而这个函数是中断开放时才被调用。因此我们不能忽略申请中断后,所产生的每一次中断。view plaincopy to clipboardprint?代码段 1... 阅读全文
posted @ 2009-09-02 21:35 palam 阅读(1547) 评论(0) 推荐(0)

摘要:PC-Lint是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器。它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误。C语言的灵活性带来了代码效率的提升,但相应带来了代码编写的随意性,另外C编译器不进行强制类型检查,也带来了代码编写的隐患。PCLint识别并报告C语言中的编程陷阱和格式缺陷的发生。它进行程序的全局分析,能识别没有被适当检验的数组... 阅读全文
posted @ 2009-09-02 21:34 palam 阅读(1175) 评论(0) 推荐(0)

摘要:软中断是利用硬件中断的概念,用软件方式进行模拟,实现宏观上的异步执行效果。很多情况下,软中断和"信号"有些类似,同时,软中断又是和硬中断相对应的,"硬中断是外部设备对CPU的中断","软中断通常是硬中断服务程序对内核的中断","信号则是由内核(或其他进程)对某个进程的中断"(《Linux内核源代码情景分析》第三章)。软中断的一种典型应用就是所谓的"下半部"(bottom half),它的得名来自于将硬件中断处理分离成"上半部"和"下半部"两个阶段的机制:上半部在屏蔽中断的上下文中运行,用于完成关键性的处理动作;而下半部则相对来说并不是非常紧急的,通常还是比较耗时的,因此由系统自行安排运行时机,不在中断服务上下文中执行。bottom half的应用也是激励内核发展出目前的软中断机制的原因,因此,我们先从bottom half的实现开始。 阅读全文
posted @ 2009-09-02 21:33 palam 阅读(332) 评论(0) 推荐(0)

摘要:我们在 Debian GNU/Linux 中有时软件源的网络速度慢,在使用 apt 安装源中的软件时总是因源服务器负荷大而时间很长,所以想换个软件源或添加软件源又不知道怎么做,现在就给您讲一下 Debian GNU/Linux 中软件源的修改方法。步骤很简单,只要修改在 /etc/apt/sources.list 文件中的软件源地址就可以了,但要记得这个文件不是谁都能修改的,要有系统管理员权限才行。 阅读全文
posted @ 2009-09-02 21:32 palam 阅读(1235) 评论(0) 推荐(0)

摘要:信号量的API有:DECLARE_MUTEX(name)   该宏声明一个信号量name并初始化它的值为0,即声明一个互斥锁。DECLARE_MUTEX_LOCKED(name)   该宏声明一个互斥锁name,但把它的初始值设置为0,即锁在创建时就处在已锁状态。因此对于这种锁,一般是先释放后获得。void sema_init (struct semaphore *sem, int val);  ... 阅读全文
posted @ 2009-09-02 21:30 palam 阅读(445) 评论(0) 推荐(0)

摘要:一、内核裁减与编译1、安装make ,gcc, make-kpkg,运行menuconfig等等和编译内核相关的工具。安装命令如下$sudo apt-get install build-essential kernel-package libncurses5-dev如果无法安装请检查/etc/apt/sources.list2、解压源代码可以解压到任意目录,我们在这里解压到/usr/srctar ... 阅读全文
posted @ 2009-09-02 21:29 palam 阅读(1323) 评论(0) 推荐(0)

摘要:当前P2P(peer to peer)的应用越来越多,用户人数急剧增加。P2P的一个主要应用领域就是文件共享,其中最有代表性的就是BT和eMule这两个软件。这类P2P文件共享传输一般具有下面两个特点:  长时间开机,以便用户可以下载更多的内容,这就要求机器的功耗不能太大;  对性能要求不高,目前国内主要的宽带上网方式是ADSL,最高带宽是6MBps(既750K字节/秒)。这类P2P文件传输的真正瓶颈在于网速。 阅读全文
posted @ 2009-09-02 21:25 palam 阅读(1428) 评论(0) 推荐(0)

摘要:本文详细的介绍了Linux内核中的同步机制:原子操作、信号量、读写信号量和自旋锁的API,使用要求以及一些典型示例 阅读全文
posted @ 2009-09-02 21:24 palam 阅读(292) 评论(0) 推荐(0)

摘要:首先我们用 which alien 命令查看是否安装了alien。如果没有安装,使用命令 apt-get install alien 进行安装如果没有源,这个时候我们需要修改源的文件,给其添加源,对于debian 5.0 (其他版本不知是否可行,因为我用的就是5.0)我们可以在 /etc/apt/sources.list 文件中添加 如下一行deb ftp://ftp.tw.debian.org/... 阅读全文
posted @ 2009-09-02 21:23 palam 阅读(4520) 评论(0) 推荐(0)

摘要:做的新板,无论是主机telnet还是ftp,都要老半天。今天突然发现,把DNS设为网关后很快就能连上。原因还不知道,看来TCP/IP知识还是要补补了。修改DNS方式:1.用echo命令echo ‘nameserver *.*.*.* ’ > /etc/resolv.conf2.直接修改 /etc/resolv.conf中的地址不过郁闷的是还是ping不通外网!!总算可... 阅读全文
posted @ 2009-09-02 21:22 palam 阅读(781) 评论(0) 推荐(0)

摘要:最近一直想在Linux中开发S1mp3项目,可是我在VMware中装上 Debian/Linux后就是装不上VMware-tools,在网上搜集了一下资料没有一个适合我的,而且讲的都是很简单就装上来,没办法,只能自己 下手,经过几个小时的努力终于解决了,现在把自己的方法公布给大家,防止大家走弯路。用到了以下几个命令apt-get、apt-cache、uname-a首先检查的Debian在安装时,根... 阅读全文
posted @ 2009-09-02 21:20 palam 阅读(1115) 评论(0) 推荐(0)