今天组长交给我一个很无聊的任务,让我将一个包含很多.c源文件的目录上传到模拟器,然后修改一下里面的内容。
要求是必须每个给每个.c文件新建一个目录。。里面有十几个文件。。。
一个个的mkdir太麻烦了吧。于是手写了个python脚本。gendir.py 内容如下:
import os
import shutil
listdir = os.listdir('test_code')
for files in listdir:
os.makedirs(files[0:len(files)-2])
for files in listdir:
shutil.move('test_code/'+files,files[0:len(files)-2]+'/')
shutil.copy('SYSPrint.c',files[0:len(files)-2]+'/')
shutil.copy('SYSPrint.h',files[0:len(files)-2]+'/')
我上传完之后,发现我们的模拟器没有print函数,于是手写了一个
SYSPrint.h
#include
typedef unsigned int U32;
void pchar(char c);
void print_num(U32 num, U32 base);
void print2(char *fmt,...);
SYSPrint.c
#include"SYSPrint.h"
U32 *const output = (U32*)0x80000070;
const char charlist[16] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' };
void pchar(char c){
*output = c;
}
void print_num(U32 num, U32 base){
U32 a;
if((a = num / base) != 0){
print_num(a,base);
}
pchar(charlist[num%base]);
}
void print2(char *fmt,...){
va_list ap;
char *p, *sval;
int ival;
va_start(ap,fmt);
for(p = fmt; *p ; p++){
if(*p != '%'){
pchar(*p);
continue;
}
switch(*++p){
case 'd':
case 'i':
ival = va_arg(ap,int);
if(ival < 0){
pchar('-');
ival = -ival;
}
print_num(ival,10);
break;
case 'o':
case 'u':
case 'x':
ival = va_arg(ap,int);
print_num(ival,*p == 'o' ? 8u : *p == 'u' ? 10u : 16u);
break;
case 's':
for(sval = va_arg(ap,char*); *sval; sval++){
pchar(*sval);
}
break;
default:
pchar(*p);
break;
}
}
va_end(ap);
}
#include"SYSPrint.c"
咋能包含.c文件呢,于是我打算修改一下 :
#include"SYSPrint.h"
十几个文件,感觉好无聊。一个个的修改,于是想到了shell,sed的用法:
sed -i 's/SYSPrint.c/SYSPrint.h/g' test_*/*.c
用学过的东西 解决无聊的问题,也算一种乐趣。