}
dir = 0,th = 0,tl = 0,tc = 0; int i, j;
tms = H * L;
for(i = 0; i < H; i ++)
for(j = 0; j < L; j ++) map[i][j] = -1; while(tms--) { map[th][tl] = tc; tc = (tc+1)&; int nh = th + moveh[dir]; int nl = tl + movel[dir]; if(nh >= H || nh < 0 || nl >= L || nl < 0 || map[nh][nl] != -1) { dir = (dir + 1)%4; } th = th + moveh[dir]; tl = tl + movel[dir]; }
for(i = 0; i < H; i ++) for(j = 0; j < L; j ++) drv_buf[i*L+j]= map[i][j];
3、test_demo.c
char MAX_LEN=2; char H = 4, L = 5;
void showbuf(char *buf) { int i,j=0; for(i = 0; i < H; i ++) { for(j = 0; j < L; j ++) printf(\ printf(\ } printf(\}
int main() { int fd,i; char buf[255]; buf[0] = H; buf[1] = L; fd=open(\ if(fd<0) {
printf(\ return(-1); } printf(\ printf(\ printf(\ write(fd,buf,MAX_LEN); MAX_LEN = buf[0] * buf[1]; printf(\ read(fd,buf,MAX_LEN); showbuf(buf); ioctl(fd,1,NULL); close(fd); return 0; }
六 实验结果(要求截图)
1、编译nodevfs.c 与 test_demo.c。之后建立节点,插入驱动。 2、执行test_demo
七 实验曾经遇到的问题与总结(请详细列举)
1、我在实验时对照教程看懂test_demo.c如何向驱动写数据(write(fd,buf,MAX_LEN);)和读数据(read(fd,buf,MAX_LEN);)。接着看驱动如何处理(do_write())(多亏老师写的诡异的程序,一下子就找到了)。把老师的程序注释掉之后然后套上自己的矩阵程序就大功告成了。
2、我在写驱动程序想回传处理完的矩阵时直接传2维矩阵,结果出错。我只好转换为1维数组然后回传然后再test_demo.c中恢复。
3、在帮助其他同学时发现很多人都没有修改test_demo.c中的MAX_LEN而造成各种乱码。