博文

ARM专栏]关于嵌入式系统方向(2006-03-15 16:39:00)

摘要:嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常常见到的手机、PDA、电子字典、可视电话、VCD/DVD/MP3 Player、数字相机(DC)、数字摄像机(DV)、U-Disk、机顶盒(Set Top Box)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。嵌入式系统是软硬结合的东西,搞嵌入式开发的人有两类。一类是学电子工程、通信工程等偏硬件专业出身的人,他们主要是搞硬件设计,有时要开发一些与硬件关系最密切的最底层软件,如BootLoader、Board Support Package(像PC的BIOS一样,往下驱动硬件,往上支持***作系统),最初级的硬件驱动程序等。他们的优势是对硬件原理非常清楚,不足是他们更擅长定义各种硬件接口,但对复杂软件系统往往力不从心(例如嵌入式***作系统原理和复杂应用软件等)。另一类是学软件、计算机专业出身的人,主要从事嵌入式***作系统和应用软件的开发。如果我们学软件的人对硬件原理和接口有较好的掌握,我们完全也可写BSP和硬件驱动程序。嵌入式硬件设计完后,各种功能就全靠软件来实现了,嵌入式设备的增值很大程度上取决于嵌入式软件,这占了嵌入式系统的最主要工作(目前有很多公司将硬件设计包给了专门的硬件公司,稍复杂的硬件都交给台湾或国外公司设计,国内的硬件设计力量很弱,很多嵌入式公司自己只负责开发软件,因为公司都知道,嵌入式产品的差异很大程度在软件上,在软件方面是最有“花头“可做的),所以我们搞软件的人完全不用担心我们在嵌入式市场上的用武之地,越是智能设备越是复杂系统,软件越起关键作用,而且这是目前的趋势。从事嵌入式软件开发的好处是:(1) 目前国内外这方面的人都很稀缺。一方面,是因为这一领域入门门槛较高,不仅要懂较底层软件(例如***作系统级、驱动程序级软件),对软件专业水平要求较高(嵌入式系统对软件设计的时间和空间效率要求较高),而且必须懂得硬件的工作原理,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,很多软硬件......

阅读全文(164) | 评论:0

Linux系统初学者的常见问题解决集结大全(2006-03-15 16:37:00)

摘要:一、 如何建立多用户 提醒大家一句,别一直使用root用户,因为root用户在系统中有着至高无上的权力,一不小心就可能破坏系统。比如我们想删除/temp目录下的文件却将命令不小心输成“rm / temp(在‘/’后多了一个空格)”,那么就极可能删去根目录下的所有文件。 再者,“Linux是一个真正意义上的多任务、多用户系统”,不体会一下Linux的特色岂不可惜。为了方便自己和别人使用,就在Linux系统下多建几个用户吧。 输入“adduser newuser”,回车,屏幕对命令没有一点儿反应,错啦?不,实际上,系统已接受了新用户。你应该接着输入命令 “passwd newuser”,屏幕将提示输入口令,再次输入确认, 一个新的用户就增加成功,真简单。马上登录试一试吧。 Linux提供了六个虚拟控制台,用ALT+F1~F6切换(在X-window下用CRTL+ALT+F1~F6切换),每个控制台均可以用不同的用户登录,运行不同的程序。赶快为家人和朋友建个用户吧。 二、在Linux下如何使用软盘、光盘以及DOS等非Linux分区 这是Linux初学者问得最多的问题。由于大家已习惯了微软的访问方法,总想用类似的思路来找到软盘和光盘。但在Linux下,却沿袭了UNIX将设备当作文件来处理的方法。所以要访问软盘和光盘,就必须先将它们装载到Linux系统的/mnt目录中来。 装载的命令是mount,格式如下:mount -t 文件系统类型 设备名 装载目录 文件系统类型就是分区格式,Linux支持的文件系统类型有许多: msdos DOS分区文件系统类型、 vfat 支持长文件名的DOS分区文件(可以理解为Windows文件)系统类型、 iso9660 光盘的文件系统类型、 ext2 Linux的文件系统类型 ...... 设备名,指的是你要装载的设备的名称。软盘一般为/dev/fd0 fd1;光盘则根据你的光驱的位置来决定,通常光驱装在第二硬盘的主盘位置就是/dev/hdc;如果访问的是DOS的分区,则列出其设备名,如 /dev/hda1是指第一硬盘的第一个分区。 装载目录,就是你指定设备的载入点。 1. 装载软盘 首先用 mkdir /mnt/floppy 在/mnt目录下建立一个空的floppy目录,然后输入mount -t msdos /dev/fd0 /mnt/flo......

阅读全文(144) | 评论:0

/线性表(2006-03-15 13:25:00)

摘要:#include<stdio.h>#include<stdlib.h>typedef int DataType;typedef int ElemType;#define MAXLISTSIZE 20typedef struct slist{ ElemType elem[MAXLISTSIZE];    // 存储空间基址 ElemType length;   // 当前长度  ElemType listsize; //允许的最大存储容量(以sizeof(ElemType)为单位)}*seqlist;      //顺序表 seqlist creatsqlist(void){//建立一个线性表 seqlist p; p=(seqlist)malloc(sizeof(struct slist)); if(!p) {  puts("can't malloc space");  exit(1); } p->length=0; p->listsize=MAXLISTSIZE; return p;}//creatsqlist void insertsqlist(seqlist pl,DataType pos,ElemType e){//在pos指示位置插入元素e DataType i; if(pl->length==pl->listsize) {  puts("overflow!");  exit(1); } if(pos<0||pos>pl->length) {  puts("can't find pos!");  exit(1); } for(i=pl->length-1;i>=pos;i--) {  pl->elem[i+1]=pl->elem[i......

阅读全文(1847) | 评论:0

顺序链队列(2006-03-14 19:30:00)

摘要:#include<stdio.h>#include<stdlib.h>//#define NULL 0typedef int DataType;typedef struct Node{//定义一个节点 DataType data; struct Node *link;}*Noder; typedef struct linklist{//定义链表队列的头指针&尾指针 Noder front; Noder rear;}*plinklist; plinklist creatLinkList(void){//初始化一个链表队列 plinklist p; p=(plinklist)malloc(sizeof(struct Node)); if(!p)  exit(1); else {  p->front=NULL;  p->rear=NULL; } return p;}//initLinkList void intoLinklist(plinklist pl,DataType e){//向队列一个节点 Noder p; p=(Noder)malloc(sizeof(struct Node)); if(!p)  exit(1); p->data=e; p->link=NULL; if(pl->front==NULL) {  pl->front=p;  pl->rear=p; } else {  pl->rear->link=p;  pl->rear=p; }}//intoLinklist int linklistempty(plinklist pl){ return(pl->front==NULL);}//iflinklistempty DataType dellinklist(plinklist......

阅读全文(2572) | 评论:0

线性单链表(2006-03-14 19:29:00)

摘要://线性单链表#include<stdio.h>#include<stdlib.h> typedef int DataType;typedef struct Node{ DataType data; struct Node *next;}*linklist; //////////////////////////////////////linklist creatlinklist(void){//建立一个链表 linklist pl; pl=(linklist)malloc(sizeof(struct Node)); if(!pl) {  puts("can't malloc room");  exit(1); } pl->next=NULL; return pl;}//creatlinklist //////////////////////////////////////void destroylinklist(linklist plink){//销毁以plink为头节点的链表,并且释放空间。 linklist p; while(plink) {  p=plink;  plink=plink->next;  free(p); } plink=NULL;//为安全起见,置plink为 "空";}//destroylinklist //////////////////////////////////////void insertlinklist(linklist plink,DataType e,DataType pos){//向链表中插入一个e linklist pl,pt=plink; int j=0; while(pt&&j<pos-1) {  pt=pt->next;  j++; } if(!pt||j>pos-1) {  ......

阅读全文(2587) | 评论:0

cs5550(2006-03-13 17:51:00)

摘要:;*********************************************************** ;This is basic programs for CS5550A EVALUATE-BOARD ;condition:12MHz,CPU[51] ;Write by RockChen on 2002.1.17 in HoneStar ;*********************************************************** cs  equ p1.0 sdi  equ p1.1 sdo  equ p1.2 sclk  equ p1.3 int  equ p3.3 ;byte======================================================= tempa  equ 30h temph  equ 31h tempm  equ 32h templ  equ 33h ;***********************************************************   org 00h   ljmp start   org 30h    start:          clr cs   lcall   init5550a    main:   mov a,#0ah  ;read cc         lcall writebyte ;send command   lcall readbyte ......

阅读全文(3795) | 评论:4