看了两周的rtems,测试了几个程序, 在pc机下面都是测试通过的。现在帖出来方便以后记得。个别句子会说明一下其作用。
#include <bsp.h>
#include <fcntl.h>
#include <stdio.h>
#include <memory.h>
char *bufr = "Happy days are here again. Good morning! This is a great decision!";
rtems_task Init(
rtems_task_argument ignored
)
{
int fd;
int i, n, total;
char *bufr2;
printf( "BUFSIZ = %d/n", BUFSIZ );
bufr2 = (char *)malloc(BUFSIZ);
fd = creat("tester", S_IRWXU | S_IRWXG | S_IRWXO); //这里是创建一个文件tester,后面是标志位,不用多说。
for (i=0; i<3; i++) { //循环三次向里面写相同的内容,为了测试。
n = write(fd, bufr, strlen(bufr)); //
printf("Wrote %d/n", n);
}
close(fd);
total = 0;
fd = open("tester", O_RDONLY); // 打开文件,之前要反文件关闭。不然会出错的。
// 这里要往fd写是写不到文件里去的。至于为什么,我也不清楚,等看看源码,
//偏偏可以读,就是写不进去,改为可写也不行,不知道为何!!
while ((n=read(fd,bufr2,10)) > 0) { // 把写入文件的内容读出来,并打印在屏幕上。
bufr2[n-1] = '/0';
total += n;
printf("Read=%d, total=%d : %s/n", n, total, bufr2);
}
free(bufr2);
close(fd);
exit(0);
}
/* NOTICE: the clock driver is explicitly disabled */
#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
#define CONFIGURE_MAXIMUM_TASKS 2
#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM // 这里是IMFS,必须要定义
#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 4 // 这个比较重要,为什么要定义为4,因为默认定义为3,而偏偏0,1,2被标准输入,标准输出,标准出错给占了。所以这里要定义为4,也可以大一点。根据需要而定。
#define CONFIGURE_INIT // 这个是必须要定义的宏,
/* rtems 就是通过判断用户是否定义了#define CONFIGURE_INIT 来启动多任务并实现驱动的。 */
#include <rtems/confdefs.h>
/* end of file */
编写Makefile 编译之后,通过grub引导就可以看到结果了。