uclinux-2008R1-RC8(bf561)到VDSP5的移植(2):代码注释

因为uclinux内核是个庞然大物,为避免一开始就遭受打击,所以就决定先将所有的代码注释掉。但是与此同时要保留各个文件之间的依赖关系,因此必须保留#include这样的语句。再考虑到uclinux是通过宏定义来控制各种功能实现的,且宏定义几乎不会对移植造成任何困扰,所以也保留了#if #define这样的语句。

以下就是自己写的一小段代码,用于实现上述功能,在VS2005下可以使用。

// hprocess.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <windows.h>#include <fstream>#pragma warning(disable:4996)using namespace std;void ChangeFile(char* pFile){     char line[10000];     char* p, c;     printf("%s processing ... ", pFile);     ifstream f(pFile);     ofstream o("tmp.h");     c = pFile[strlen(pFile)-1];     if(c == 'c' || c == 'C')         o << "#include <config.h>" << endl;     bool bIsDefine = false;     do     {         f.getline(line, 10000);         if(bIsDefine)         {              if(line[strlen(line)-1] != '//')                   bIsDefine = false;         }         else         {              if(strstr(line, "#define") && line[strlen(line)-1] == '//')                   bIsDefine = true;              else              {                   p = line;                   while(*p == ' ') p++;                   if(*p != '#')                       o << "//";              }         }         o << line << endl;     }while(!f.eof());     f.close();     o.close();     CopyFile("tmp.h", pFile, FALSE);     printf("done!/n");}int ProcessFile(char* pDir){     WIN32_FIND_DATA FindFileData;     HANDLE hFind = INVALID_HANDLE_VALUE;     char DirSpec[MAX_PATH]; // directory specification     char NextPath[MAX_PATH];  // directory specification     DWORD dwError;     printf ("Target directory is %s./n", pDir);     strcpy (DirSpec, pDir);     strcat (DirSpec, "*");     hFind = FindFirstFile(DirSpec, &FindFileData);     if (hFind == INVALID_HANDLE_VALUE)      {         printf ("Invalid file handle. Error is %u/n", GetLastError());         return (-1);     }      else      {         do         {              if(strcmp(FindFileData.cFileName, ".") == 0 || strcmp(FindFileData.cFileName, "..") == 0) continue;              if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)              {                   if(strcmp(FindFileData.cFileName, "vs2005") == 0) continue;                   strcpy(NextPath, pDir);                   strcat(NextPath, FindFileData.cFileName);                   strcat(NextPath, "//");                   ProcessFile(NextPath);              }              else              {                   int len = strlen(FindFileData.cFileName);                   if(FindFileData.cFileName[len-2] == '.' && (FindFileData.cFileName[len-1] == 'h' || FindFileData.cFileName[len-1] == 'H' || FindFileData.cFileName[len-1] == 'C' || FindFileData.cFileName[len-1] == 'c'))                   {                       strcpy(NextPath, pDir);                       strcat(NextPath, FindFileData.cFileName);                       ChangeFile(NextPath);                   }              }         }while (FindNextFile(hFind, &FindFileData) != 0);         dwError = GetLastError();         FindClose(hFind);         if (dwError != ERROR_NO_MORE_FILES)          {              printf ("FindNextFile error. Error is %u/n", dwError);              return (-1);         }     }     return (0);}int _tmain(int argc, _TCHAR* argv[]){     ProcessFile("D://uc2008//linux-2.6.x//");     printf("all ok");     getchar();     return 0;}

当然,在使用之前要设置好正确的路径。

不过这段代码有个BUG,就是对换行符的处理。因为linux下的文件和windows下的文件换行符是不同的,因此如果#define语句有换行,那么就很可能不会得到正确的结果,需要在移植时加以注意。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索移植
, include
, 注释
, ofstream
, 代码
, char
语句
,以便于您获取更多的相关知识。

时间: 2024-10-18 08:34:26

uclinux-2008R1-RC8(bf561)到VDSP5的移植(2):代码注释的相关文章

uclinux-2008R1-RC8(bf561)到VDSP5的移植(62)

uclinux-2008R1-RC8(bf561)到VDSP5的移植(62):Failed to open '#include' file 'bf561.h' 在include/asm/mach/blackfin.h文件中,有这样的语句: #include "bf561.h" #include "mem_map.h" #include "defBF561.h" #include "anomaly.h" 当在asm文件中包含这个

uclinux-2008R1-RC8(bf561)到VDSP5的移植(58)

uclinux-2008R1-RC8(bf561)到VDSP5的移植(58): unable to open an initial console blog. 碰到一个郁闷的问题,提示" unable to open an initial console"后再没有下文了. 搜了下这个错误出现的位置,在init_post函数中: if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)

uclinux-2008R1-RC8(bf561)到VDSP5的移植(57)

clinux-2008R1-RC8(bf561)到VDSP5的移植(57):_NSIG_WORDS_is_unsupported_size 在include/linux/signal.h中使用了一个函数_NSIG_WORDS_is_unsupported_size,其使用过程大致如下所示: static inline int sigisemptyset(sigset_t *set) { extern void _NSIG_WORDS_is_unsupported_size(void); swit

uclinux-2008R1-RC8(bf561)到VDSP5的移植(43)

uclinux-2008R1-RC8(bf561)到VDSP5的移植(43):__builtin_return_address的问题 __builtin_return_address (LEVEL):这是GCC的内建函数,用于返回当前函数或其调用者的返回地址,参数LEVEL 指定在栈上搜索框架的个数,0 表示当前函数的返回地址,1 表示当前函数的调用者的返回地址,依此类推.在VDSP中,通过FP的循环取值可以完成相似的功能(参见以前的文章<使用FP取得函数的调用堆栈>).查了下内核对此函数的使

uclinux-2008R1-RC8(bf561)到VDSP5的移植(24):CONFIG_NR_CPUS

uclinux内核将bf561的每一个核都视为一个独立的CPU,因此在config.h中补上定义: // 多核支持 #define CONFIG_SMP 1 #define CONFIG_NR_CPUS 2

uclinux-2008R1-RC8(bf561)到VDSP5的移植(1):前言

1 目标 将uclinux-2008R1-RC8(bf561)移植到VDSP5上. 让uclinux支持双核. 2 原则 1.首先注释掉所有的声明和实现,但是保留#include和#define这样的语句. 2.逐步添加所需要的功能. 3.smp相关的部分参考linux-2.6.19的内核. 4.使用VDSP库.

uclinux-2008R1-RC8(bf561)到VDSP5的移植(3):Head.s

uclinux系统的入口点为head.s,因此先将此文件添加到corea.dlb,先改下语法错误. 1 时钟配置 因为没有使用引导程序,因此在内核启动时需要重新配置CPU的运行速度.在config.h中添加以下定义: // 时钟配置 #define CONFIG_CLKIN_HZ 27000000 // 晶振频率 #define CONFIG_VCO_MULT 22 // 内核倍频 #define CONFIG_CCLK_DIV 1 // 内核分频 #define CONFIG_SCLK_DIV

uclinux-2008R1-RC8(bf561)到VDSP5的移植(37):_cplb_mgr

在uclinux内核中,提供了一个函数:_cplb_mgr,此函数位于 arch/blackfin/kernel/cpu-nompu/cplbmgr.s,它的作用是当bf561发生cplb miss exception的时候替换掉最后的cache范围.在vdsp5中同样提供了一个_cplb_mgr的函数,而且VDSP在默认情况下会使用自己的库中的函数,从而造成内核错误. 因此,我们需要在config.h中增加一个定义: #define _cplb_mgr _uclinux_cplb_mgr #d

uclinux-2008R1-RC8(bf561)到VDSP5的移植(59):Milestone:内核成功启动

终于成功编译了第一个版本,庆祝一下: Linux version 2.6.22.18-ADI-2008R1-svn (lights@hb165.com) (Visual DSP++ 5.0) #5 Tue Apr 8 16:09:27 CST 2008Hardware Trace Off and DisabledWarning: limiting memory to 60MB due to hardware anomaly 05000263Reset caused by Software res