嵌入式实验指导书(2)

2019-02-26 10:53

主机显示、设置时间举例。

⑴ 使用参数u表示UTC时间 设置时间可以使用命令及参数: date –u MMDDhhmmYYYY.ss

其中u表示UTC,从MM开始的参数分别表示月、日、时、分、年和秒。 例如:

[root@localhost ~]# date -u 011016302013.30 2013年 01月 10日 星期四 16:30:30 UTC

系统会将设置的UTC时间,自动转换成CST时间显示,例如输入date命令后,会显示:

[root@localhost ~]# date

2013年 01月 11日 星期五 00:31:42 CST ⑵ 不使用参数u表示按当地时间设置 以下设置没有设置秒,缺省值为0: [root@localhost ~]# date 011016322013 2013年 01月 10日 星期四 16:32:00 CST [root@localhost ~]# date

2013年 01月 10日 星期四 16:32:11 CST

3.要求学生了解以下程序的含义,为程序加注释。在此基础上,在实验五helloword 程序中,增加显示日期和时间、以及自己名字的代码。 4.自己编写对应的Makefile文件。 5.程序部分

以程序中time()函数读取时间的秒值;gmtime()函数将这个秒值转换成一个结构,保 存在tm_ptr中;ctime()函数把秒值转换成一个字符串;printf()函数将秒值、结构、字符串输出。sleep(3)函数表示休眠3秒,然后重复读取秒值、转换成结构和字符串输出。

程序代码为: #include #include /*#include */ int main() {

struct tm *tm_ptr; time_t the_time; (void)time(&the_time);

tm_ptr=gmtime(&the_time);

printf(\

printf(\

printf(\tm_sec);

printf(\

sleep(3);

(void)time(&the_time); tm_ptr=gmtime(&the_time);

printf(\

printf(\->tm_mday);

printf(\

tm_ptr->tm_hour,tm_ptr->tm_min,tm_ptr->tm_sec);

printf(\

return 0; }

6.编写Makefile文件,执行程序,将试验结果写到报告中。 7.将目标板的时间改成当前时间,再次执行该程序。

-/-/-\\n\

实验七 串行端口及标准输入/输出/错误编程举例

四、实验原理

⒈ 系统调用、库函数和设备驱动程序

Linux中系统调用、库函数和设备驱动程序之间的关系,如图所示。

用户程序可以直接使用系统调用;也可以通过库函数(如标准I/O库函数对应的头文件是stdio.h),由库函数去调用系统调用。由系统调用去调用设备驱动程序,驱动硬件设备工作。

系统调用也是一些函数,它们由Linux直接提供,是通向操作系统本身的接口。 Linux系统把不同的设备,抽象成不同的文件;对设备的操作,抽象成对文件的open、read、write、close和ioctl等操作。

2.Linux标准输入/输出/错误系统调用

Linux标准输入/输出/错误这一术语的含义,是指标准输入设备/标准输出设备/标准错误输出设备。在一个用户程序运行时,系统已经打开了这3个设备,并且返回了相应的文件描述符。

Linux环境中,每个运行的程序被称为进程(process),每个进程有一些与之相关联的文件描述符。文件描述符是一些小数值的整数,通常由用户打开(open)一个文件或设备时产生的返回值得到。

当一个用户程序开始运行时,它一般可以使用3个已经打开设备返回的文件描述符,这3个描述符不是由用户程序中打开(open)操作返回的,而是由系统产生的。这3个文件描述符是:

0表示标准输入,例如read(0,&c,1);表示从标准输入读入一个字符保存在c中; · 1表示标准输出,例如write(1,&c,1);表示输出c中的一个字符到标准输出; · 2表示标准错误,例如write(2,&c,1);表示输出c中的一个字符到标准错误。 当一个程序运行结束时,也不用通过这3个文件描述符去关闭(close)对应的文件或设备。

3. 标准输入/输出/错误与串行端口及仿真终端

嵌入式开发系统目标板上运行的程序,通常把标准输入/输出/错误对应的文件,与目标板上第一个串行端口,即/dev/tts/0设备关联起来。对标准输入/输出/错误的操作,就是对该串行端口的读、写操作。由于目标板第一个串行端口通过电缆与主机串行端口连接,主机Linux系统启动minicom仿真终端程序后,目标板运行的程序中的标准输入系统调用,读入的是主机键盘输入内容,而标准输出和标准错误系统调用将输出的信息,通过串口送到主机仿真终端窗口。

使用标准输入/输出/错误系统调用时,不需要对串行端口重新设置波特率、帧格式、有无调制解调器等参数,默认使用目标板Linux内核已经设定的值。

五、实验步骤

1.程序部分

在目标板运行这个程序后,用户在主机minicom终端输入一个小写字母并回车,程序会自动输出全部小写字母,然后输出回车;继续输出全部小写字母,输出回车;直到用户按下Ctrl+c,程序终止;如果用户最初输入的不是小写字母,则程序直接退出。

程序代码如下: #include #include /*#include */ #define FALSE 0 #define TRUE 1

/*--------------------------------------------------------*/ int main() {

char c; int STOP=FALSE;

write(2,\/*标准错误系统调用*/

write(1,\/*标准输出系统调用*/

write(1,\write (1,\while (1)

{

read(0,&c,1); /*标准输入系统调用*/ if ((c < 'a') || (c > 'z' )) { STOP=TRUE; break; }

write(1,\ write(1,&c,1);

write(1,\ c='a';

while (STOP==FALSE) {

write(1,&c,1); c++;

usleep(100000);

if (c=='z'+1) { c='\\n';write(1,&c,1);c='a';} } }

write(1,\exit(0); }

2. 要求学生了解以上程序的含义,为程序加注释。 3.自己编写对应的Makefile文件。 4.在目标板上执行上述程序,记录输出信息。

5.提示:假定上述程序代码、Makefile文件已经输入,保存在主机Linux的/home/nfs目录下,程序代码在目标板执行。 6.修改上述程序编程实现下述功能

(1)如果在仿真终端键盘输入为数字,则程序输出“0123456789”;

(2)如果在仿真终端键盘输入为小写字母,则程序输出“a~z”的26个小写字母; (3)如果在仿真终端键盘输入为大写字母,则程序输出“ ~z”的26个大写字母; (4)如果在仿真终端键盘输入其他字符,则程序终止。

七、注意事项

1. 自行编写Makefile文件。

2. 改写程序,使其在一个程序中实现如果在仿真终端键盘输入为数字,则程序输出“0123456789”;如果在仿真终端键盘输入为小写字母,则程序输出“a~z”的26个小写字母;如果在仿真终端键盘输入为大写字母,则程序输出“ ~z”的26个大写字母;如果在仿真终端键盘输入其他字符,则程序终止。


嵌入式实验指导书(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:金蝶K3RISE专业版V12.2升级指南

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: