登陆注册
49623100000031

第31章 第四分论坛(4)

(3)时钟部分(OSTime.c):uC/OS-II中最小时钟单位是timetick(时钟节拍),其中包含时间延迟、时钟设置及时钟恢复等与时钟相关的函数。

(4)多任务同步与通信(OSMbox.c,OSQ.c,OSSem.c,OSMutex.c,OSFlag.c):包含事件管理函数,涉及Mbox、msgQ、Sem、Mutex、Flag等。

(5)内存管理部分(OSMem.c):主要用于构建私有的内存分区管理机制,其中包含创建memPart、申请/释放memPart、获取分区信息等函数。

(6)CPU接口部分:uC/OS-II针对特定CPU的移植部分,由于牵涉到SP等系统指针,通常用汇编语言编写,包括任务切换、中断处理等内容。

b.移植说明

μC/OS-II 的移植,主要是处理OS_CPU.H、OS_CPU_C.C、OS_CPU_A.ASM等三个文件。

其中OS_CPU.H 主要包含编译器相关的数据类型的定义、堆栈类型的定义以及几个宏定义和函数说明。重新定义数据类型是为了增加代码的可移植性。

S_CPU_C.C 中则包含与移植有关的C 函数,包括堆栈的初始化函数和一些钩子(hook)函数的实现。

S_CPU_A.ASM 中则包含与移植有关的汇编语言函数,包括开关中断、上下文切换、时钟中断服务程序等等。

c.移植过程

首先在通用PC 的CodeWarrior for ADS1.2软件开发平台上建立移植项目μC/OS-II 项目,加入初始化和启动代码,组织μC/OS-II 源代码和各种程序数据,经编译、调试通过生成.axf(ARM executable file)文件。在AXD 调试器中装载该程序,使用JTAG 接口下载应用程序到板载FLASH,即可进行调试。μC/OS-II 移植调试成功后可以将程序固化到FLASH,脱机运行。

3. 各种驱动程序的编写

//按芯片手册上的命令序列完成芯片的读写,擦除等操作。

#define _WR(addr,data) *((volatile U16*)(addr<;<;1))=(U16)data//写函数

#define _RD(addr) (*((volatile U16*)(addr<;<;1)))//读函数

#define _RESET() _WR(0x0,0xf0f0)

int SST39VF800_ProgFlash(U32realAddr,U16data)//真正的烧写函数

{

volatile U16*tempPt;

tempPt=(volatile U16*)realAddr;//将目标地址转化为指针

_WR(0x5555,0xaaaa);

_WR(0x2aaa,0x5555);

_WR(0x5555,0xa0a0);

*tempPt=data;//将要烧写的程序两字节两字节的烧进去

return SST39VF800_WAIT();//状态查询

}

//探测DM9000参数的函数,得到DM9000的厂商ID和产品ID,返回真或假,真:网卡被探测到,否则没有

BOOL dm9000Probe(void)

{

USHORT id_vendor,id_product;

CONSOL_Printf(“\n [DM9000Test]\n”);  //往串口0上打印字符串

id_vendor =READ_REG1(PKTPG_VNDR_ID_L); //读DM9000厂商ID

id_vendor |=READ_REG1(PKTPG_VNDR_ID_H)<;<;8;

if (id_vendor !=DM9000_VNDR_ID) //判断读取的对不对

{

CONSOL_Printf(“VENDOR ID Error (0x%04x !=0x%04x)\n”,DM9000_VNDR_ID,id_vendor);

return FALSE;

}

else

CONSOL_Printf(“VENDOR ID =0x%04x\n”,id_vendor);

id_product =READ_REG1(PKTPG_PRDCT_ID_L); //读DM9000产品ID

id_product |=READ_REG1(PKTPG_PRDCT_ID_H)<;<;8;

if ((id_product &;DM9000_PRDCT_ID)!=DM9000_PRDCT_ID) //判断读取的对不对

{

CONSOL_Printf(“Product ID Error (0x%04x !=0x%04x)\n”,DM9000_PRDCT_ID,id_product);

return FALSE;

}

else

CONSOL_Printf(“Product ID =0x%04x\n”,id_product);

return TRUE;

}

文件系统相关数据结构

FDT表记录了本目录下有哪些文件、目录以及各文件目录的属性和存储位置等信息。下面是FDT 表项数据结构定义:

typedef struct_FDT

{

char DIR_Name[11];//目录项名,亦即文件名或目录名(后三位扩展名)

uint8DIR_Attr;//文件或目录属性

uint8DIR_Resv;//FAT 保留域

uint8DIR_FstClusHI;//起始簇号高1字节

uint16DIR_CrtOrLstWrtTime;//建立或最后修改时间

uint16DIR_CrtOrLstWrtDate;//建立或最后修改日期

uint16DIR_FstClusLO;//起始簇号低两字节

uint32DIR_FileSize;//文件大小

}

打开文件的数据结构

该数据结构主要纪录已经打开文件的基本信息。数据结构定义如下:

typedef struct_FILE

{

uint8Flags;//一些标志,主要是文件是可读或可写标志

char Name[11];//文件名

uint8Drive;//文件所在驱动器

uint24DirClus;//所在目录开始簇号

uint32FileSize;//文件大小

uint24FstClus;//起始簇号

uint24Clus;//当前簇号

uint32Offset;//文件指针偏移量

}OP_FILE;

4. 轻量级嵌入式TCP/IP协议LwIP

嵌入式操作系统UC/OS是一个公开源代码的抢先式多任务的微内核RTOS,其性能和安全性可以与商业产品竞争。uC/0S-II是一个富有开放色彩的RTOS,只要买一本书就可获得源代码,对学校和教育使用完全免费,商业应用的费用相对也很低。但是它目前的一些第三方TCP/IP支持都是完全商业化的,用户需要付费才能获得,很少给出源代码,这就影响了uC/0S-II的研究和推广。通过把开放源代码的TCP/IP协议栈LwIP移植到uC/0S-II上来,就获得了一套可免费研究、学习的嵌入式网络软件平台。

LwIP是瑞士计算机科学院(Swedish Institute of Computer Science)的Adam Dunkels等开发的一套用于嵌入式系统的开放源代码TCP/IP协议栈。LwIP的含义是Light Weight(轻型)IP协议。LwIP可以移植到操作系统上,也可以在无操作系统的情况下独立运行。LwIP TCP/IP实现的重点是在保持TCP协议主要功能的基础上减少对RAM的占用,一般它只需要几十K的RAM和40K左右的ROM就可以运行,这使LwIP协议栈适合在低端嵌入式系统中使用。

LwIP的特性如下:

(1)支持多网络接口下的IP转发

(2)支持ICMP协议

(3)包括实验性扩展的UDP(用户数据报协议)

(4)包括阻塞控制,RTT估算和快速恢复和快速转发的TCP(传输控制协议)

(5)提供专门的内部回调接口(Raw API)用于提高应用程序性能

(6)可选择的Berkeley接口API(多线程情况下)

我们目前使用的是LwIP的最新稳定版V1.30。有关LwIP的详细内容,可以参考其代码和网站上的文档。

LwIP包含多个模块,除了那些实现TCP/IP协议族(IP、ICMP、UDP、TCP)的模块外,也实现了其他一些支持的模块,如:操作系统仿真层、缓冲及内存管理子系统、网络接口函数、计算检验和的函数及其他一些抽象的API。

消息传递的实现是一个抽象为“邮箱”的简单机制。一个邮箱有两种操作:邮递和收取。邮递操作不会阻塞该进程,而邮递给一个邮箱的信息会由操作系统仿真层列入队列,直到另外的进程收取该信息。即使下层操作系统不支持邮箱机制,它也能容易地由信号量实现。

5. 总结

随着信息时代的发展,嵌入式技术已经被广泛应用到日常生活中的方方面面,嵌入式系统在消费、汽车电子、微控制、无线通信、数码产品、网络设备、安全系统等领域的应用方兴未艾,从广义概念来说,除了通用的计算机系统应用外,其他所有的智能电子设备都属于嵌入式系统。未来的技术人员不懂嵌入式,就如同现代人不懂电脑一样,会与时代格格不入的。

目前在嵌入式平台上还很少有对大容量硬盘的支持及相关接口,也没有相关支持大容量硬盘的嵌入式文件系统,基于uC/OS-II系统不完善的内核进行嵌入式的应用开发虽有一定的难度,但也更具有挑战性。对于本系统,笔者原本只想拿一个小的开发板挂接上大的硬盘,接上网络放到宿舍当一个可长时间开机的、不怎么费电的网络硬盘或文件服务器用,将来还有可能为其添加USB接口U盘、移动硬盘、串口硬盘、图形用户接口等,但这要涉及嵌入式硬件及软件模块的大量工作。本系统可以作为公司及个人文件服务器、网关等使用,另外在本系统的基础上稍加改造即可实现小型网站服务器、打印管理服务器、多媒体服务器、数据汇集中心等多种功能。

参考文献:

[1]Wilson Y.H.Wang,Tow Chong Chong.An Ethernet based data storage protocol for home network.IEEE Transactions on Consumer Electronics,2004,50(2):543-551.

[2]Katz R H.Network-attached storage systems[C].Proc.SHPCC92Conf.Scalable High Performance Computing.1992,68-75.

[3]杜春雷,ARM体系结构与编程[M].北京:清华大学出版社,2003.

[4]Labrose J Jean.邵贝贝译.嵌入式实时操作系统uC/OS-II(第2版)[M].北京:北京航空航天大学出版社,2003.

[5]Charlotte Brooks,Ravi Khattar,Satoshi Suzuki,Mats Wahlstrom.IBM TotalStorage:Introducing the SAN File System.IBM International Technical Support Organization,2003.

[6]微软公司,FAT32文件系统特性(1.03)[S].2000.

[7]张江陵,冯丹.海量信息存储[M].北京:科学出版社,2003.

[8]刘柱鸿,赵跃龙.嵌入式系统IDE 接口驱动设计的关键技术[J].计算机时代,2007.1:47-48,51.

[9]韦东山,嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008.

[10]杨宗德,张兵编著.uC/OS-II标准教程[M].北京:人民邮电出版社,2009.

[11]史军勇,赵跃龙.智能网络磁盘IND 软件设计与实现[J].单片机与嵌入式系统应用,2006(2):17-20.

[12]任哲.嵌入式实时操作系统uC/OS-II 原理及应用[M].北京:北京航空航天大学出版社,2005:15-36.

同类推荐
  • 英国散文精选(译文随笔)

    英国散文精选(译文随笔)

    此书特色有五:一,书中所介绍的篇什均为美国自建国以来最具代表性的作品,故可读性较强,其中不少且属于第一次译出;二,译文特重视各原作者风格的传达与再现;三,译笔堪称审慎精练,隽美考究;四,注释亦颇认真负责,剀切详明;五,书前导言与各篇篇首的风格解析对美国散文发展的源流、趋向与各家风格的特点等均有较扼要的说明,从中不难窥见该国散文自成长至全盛的一个总的发展轨迹与概貌。本书为北岳文艺出版社所刊印的《英国散文精选》(1996)的重印本。
  • 中国散文精典·当代卷

    中国散文精典·当代卷

    大自然的神奇,往往出乎人类的想象。一个园林艺术的杰作,却伴了民族的耻辱。
  • 相逢不语

    相逢不语

    相逢不语、沉思无绪斜阳暮、离人心底伤、依然春意寒、身无彩凤思万千、雁无声,天意寒、暴雨之后,栀子花残、有一种心情,泪流满面、在深夜里让寂寞唱歌、只为心如自由花等作品。
  • 我这一生都比别人跑得慢

    我这一生都比别人跑得慢

    如果一定要用一个关键词来推荐这本《我这一生都比别人跑得慢》的话,那就只有一个词是最恰当的,有趣。但他的文章并非为了有趣而有趣,看似随意,极具调侃性,同时又不失深刻和睿智。他的文章,看似刻薄,其实话损心善;他的态度,看似玩世不恭,却在认真地誊写着他眼中的美好;他的第一本图书作品,看似文艺,实则骨子里勇敢坦率,不喜矫揉造作。
  • 诗歌朗诵技巧

    诗歌朗诵技巧

    第一部分是第一章到第四章,讲述了诗歌朗诵艺术创作的总体情况和在朗诵过程中各个环节应做的工作,包括诗歌的选定、从文字向有声语言的转化、相关要素的配合等。第二部分是第五章到第九章,讲述了格律诗、古体诗、词、现代自由体诗等不同体裁诗歌的朗诵要求和方法,选编了一些适合朗诵的作品,并对每篇作品提供了可资参考的朗诵解读。
热门推荐
  • 无天祖师

    无天祖师

    越国无疆,力量为王。青葱少年,祝我长昌!
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 旅途之末日来临

    旅途之末日来临

    她叫林若雪,她有一双不同于常人的眼睛,也有着不同于常人的人生。你若见到她,定会觉得,她很冷。是的,她的眼神很冷,她的面容很冷,她的话语很冷,她的态度也很冷。她是一个冷美人,追求她的人数不胜数,但都被她一一拒绝。也许你会觉得,她的心也是冷的,但是你错了。她有着一颗如火般的心,她害怕失去,害怕分离,所以,她将自己的心冰封,任谁都无法暖化。
  • 明士风流

    明士风流

    明初,靖难之后,永乐皇帝重启锦衣,架设东厂,都说神仙打架,小鬼遭殃,可他却在风起云涌的朝堂之上活得如鱼得水,这是一个成长的过程,这是一段属于他的历史,红袖添香、治国安邦,他用他一生的时间,为大明添砖加瓦,为大明的盛世,添上了浓墨重彩的一笔!------------------------------------------------------每天更新
  • 匆匆那么些年

    匆匆那么些年

    从游戏到现实几个女孩的故事,爱情,亲情!友情!
  • 千年回转倾如梦

    千年回转倾如梦

    林紫雪一个简简单单的女孩,一个渴望幸福的女孩,单纯如她却遭到青梅竹马柳辰飞的背叛,伤心欲绝,在一次意外中穿越到了古代,没想到在这个陌生的时代,她遇到了自己的哥哥,也找到了属于自己的幸福。
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 彼岸丶血夜静落

    彼岸丶血夜静落

    一片血色的夜空划过一颗闪亮的星子。她,现代杀手,作为孤儿的她从未有过温暖。她,异界废柴加丑女。当她和她合二为一,再睁眼已是璀璨的锋芒。丑女?废柴?她的身世蕴含着怎样的阴谋?渣男渣女的爽虐。当她遇上强大神秘的一界霸主他,又会碰撞出怎样的火花,会给她的生命带来怎样的色彩?而当他们遇上冷静坚韧的她,又如何才能不为她沦陷?本文一对一。清秋永远秉着一生一世一双人的信念。尽管放马过来,管它阴谋诡计,遇佛杀佛,遇神弑神。即使是地狱,闯了又何妨?即使是天命,逆了又怎样?
  • 寄宿

    寄宿

    薛云楚在旅游的时候被变异的外星智能附身,外星智能直接占有了他的身体,早早的退出了旅行社,在火车上目睹了偷窃事件的发生,却没有阻止更加坚定了要低调的决心。高中第一天就遇到了一起过的旅游杨静怡,他冷漠的态度让杨静怡十分不爽,平静的度过军训,课余之时,薛云楚开发了一款低级的智能软件智能管家,引发了网络风暴,现实中也为同学们仔细解答各类问题深得同学们尊敬,薛云楚在大地震过后,加快了经济发展计划,开始迈出金融帝国的步伐……
  • 间国

    间国

    来到不是已知历史的朝代,他想平凡的活着,他知道怎么避免都避免不了在封建朝代下的阶级压制,所以在他平凡的十四年里,他成了临安的解元。