1.1     代码提示功能

在vs中开发中,Visual Assist是一个很优秀的插件,我们仍然能够使用它进行代码的分析,但它仅仅能支持vcxprojproject,因而我们选择对vcxproj的project进行扩展,这样VisualAssist就能够正常使用了。

此外,VS的智能感知不支持GCC的一些扩展,在做代码分析的时候可能出错。我们採用强制包括头文件的方式解决一部分问题:

注意,这个文件的目的是让VS可以进行代码的分析,而不是让VS具有编译这些代码的能力!!

这个头文件类似于这种:

#pragmaonce

// 本文件的作用仅在于使VS可以解决语法错误,而不在于让程序正确执行!

#define__attribute__(x)

#define__signed__ 
signed

#defineinline__inline

#defineBITS_PER_LONG

#define_TIME_T

#define__inline__

#define__u64int

…….

1.2     代码编译

非常早之前,想通过移植GCC到cywin以下进行编译,最后放弃了。

当中一个原因是cywin的速度较慢,尽管是windows下的本地应用。但它的编译速度比虚拟机里执行gcc还是要慢不少。

究其原因,主要是cywin在模拟fork操作时使用的技术影响了其速度(见其他文章的分析)。

放弃cywin的还有一个原因是嵌入式Linux平台提供的编译器都是基于Linux的,非常难把这些编译器做移植。

因而我们採用远程编译的方法,当VS进行编译操作的时候,使用SSH登录到虚拟机的Linux系统中进行编译,再分析编译过程中产生的信息,将之转换为vs可以识别的信息。这样VS就行在IDE中正确定位发生错误的文件!

在这样的方式中。Make或者gcc生成的错误信息因为编译方式的不同产生的错误信息是有差异的,为了处理这样的差异,我们将这个过程用python来完毕。这样在不同的项目中仅仅须要对python脚本做少量改动就能够了。这个脚本全然能够做为项目的一部分。

这样的方式获得的还有一个优点是大大减少VS扩展的代码,从而保证了它不会影响到VS的稳定性。

1.3     生成过程控制

VS2012使用MSBUILD进行生成,它同意在一个项目改写自己的生成过程。将默认行为指向自己定义的扩展,这也是我们要採用的方式。

1.4     參数配置

对照VC和GCC的编译參数能够发现有非常多參数是同样的。如宏定义、附加文件夹等等,这部分能够直接使用。除此之外另一些特定的參数,我们通过为VS加入新的平台和属性页的方式进行支持。

这样我们能够通过VC的项目属性来配置GCC的特定參数。

对于Linux内核的配置,实际上是由scripts/kconfig/mconf或者scripts/kconfig/qconf程序来完毕的。事实上现过程是读取Kconfig文件生成菜单。再依据用户选择生成.config文件,我们将之简单改动全然能够在windows下进行配置:

在VS中依据project配置调用就能够轻松搞定。

1.5     调试

对于应用程序的调试,VS提供了调试器的引擎。我们扩展此调试器引擎,在调试时使用ssh连接到虚拟机的系统,或者直接连接到目标板。在其上使用gdb载入应用程序进行调试,或者使用gdb连接目标板的gdbserver进行调试。

我们将使用gdb的machine interface,而不是经常使用的交互接口。

驱动的调试尝试使用KGDB,没玩过,玩的时候再说吧。

1.6     project模板

在调试完毕后将UBOOT、LINUX等project固化成模板,就像这种:

1.7     辅助功能

将python控制台、ssh控制台、串口控制台集成到VS中,嘿嘿,够强大了吧~~~~

版权声明:本文博主原创文章。博客,未经同意不得转载。

Vs2012于Linux应用程序开发(2):图案的更多相关文章

  1. Vs2012于Linux应用程序开发(4):公共财产的定义

    在嵌入式开发流程.有些参数基本上不改变,比如编译主机IP,username,password等参数.我们用VS提供的属性管理器来保存这些參数. 打开属性管理器: watermark/2/text/aH ...

  2. Vs2012在Linux应用程序开发(3):加入新平台hi3516

    下面我们将VS2012添加一个新的平台支持,由于近来与哈斯hi3516.就选它吧! 1.1     复制平台文件 原来一直认为要让VS支持一个新的平台须要编写代码,某天在看MSBUILD文件夹的时候突 ...

  3. linux应用程序开发-文件编程-系统调用方式

    在看韦东山视频linux驱动方面有一些吃力,究其原因,虽然接触过linux应用程序编程,但是没有深入去理解,相关函数用法不清楚,正好看到国嵌视频对这一方面讲的比较透彻, 所以把学习过程记录下来,也作为 ...

  4. 嵌入式Linux应用程序开发详解------(创建守护进程)

    嵌入式Linux应用程序开发详解 华清远见 本文只是阅读文摘. 创建一个守护进程的步骤: 1.创建一个子进程,然后退出父进程: 2.在子进程中使用创建新会话---setsid(): 3.改变当前工作目 ...

  5. 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程

    前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...

  6. Linux入门-程序开发

    Linux程序开发 linux程序总体上来说是分两部分的: 1. 底层驱动程序开发: 2.应用层应用程序开发: 驱动程序 一般情况下驱动是跟内核与硬件有关系的,编程语言是C语言,需要懂一些硬件的知识, ...

  7. linux后台程序开发常用工具

    linux开发工具: 1.编辑工具:1)sourceInsight2)Notepad++3)UltraEdit4)Altova XMLSpy 2.linux服务器访问工具:1)FileZilla2)X ...

  8. 《嵌入式linux应用程序开发标准教程》笔记——8.进程间通信

    , 8.1 概述 linux里使用较多的进程间通信方式: 管道,pipe和fifo,管道pipe没有实体文件,只能用于具有亲缘关系的进程间通信:有名管道 named pipe,也叫fifo,还允许无亲 ...

  9. 《嵌入式linux应用程序开发标准教程》笔记——9.多线程编程

    线程是轻量级进程,创建线程的开销要比进程小得多,在大型程序中应用广泛. 9.1 线程概述 进程包含自己的代码.数据.堆栈.资源等等,创建和切换的开销比较大: 线程是轻量级的进程,调度的最小单元,同一个 ...

随机推荐

  1. oendir(),readdir(),closedir() 打开/读取/关闭目录

    目录操作 当目标是目录而不是文件的时候,ls -l的结果会显示目录下所有子条目的信息,怎么去遍历整个目录呢?答案马上揭晓! 1. 打开目录 功能:opendir()用来打开参数name指定的目录,并返 ...

  2. 编译U-boot时,make[1]: *** 没有规则可以创建mkimage.o”

    执行完make smdk2440_config 对Uboot重行编译怎么会出现这样的错误 make[1]: Entering directory `/home/win/S3-ARM/Part4/ubo ...

  3. Code First 数据注释--InverseProperty 和 ForeignKey

    ForeignKey 按照约定在Post类中看到BlogId属性,会认为是Blog类的外键,但是在Blog类中并没有BlogId属性,解决方法是,在 Post 中创建一个导航属性,并使用 Foreig ...

  4. cocos2dx 音效 粒子 数据存储

    1.音效 引入头文件 #include "simpleAudioEngine.h" 命名空间 using namespace CocosDenshion; //创建一个背景 Siz ...

  5. 8 fastJson的使用

    Fastjson介绍 Fastjson是一个Java语言编写的JSON处理器,由阿里巴巴公司开发. 1.遵循http://json.org标准,为其官方网站收录的参考实现之一. 2.功能qiang打, ...

  6. 空值排序(oracle/sqlserver)

    oracle认为 null 最大. 升序排列,默认情况下,null值排后面. 降序排序,默认情况下,null值排前面. 改变空值办法: (1)用nvl函数或decode函数将null转换为一特定值 替 ...

  7. ViewDragHelper的使用

    一.ViewDragHelper的原理 是一个能够自用移动ViewGroup内部View的控件. 通过获取ViewGroup的点击事件,之后通过Scroller滑动来进行对ViewGroup内部控件的 ...

  8. nignx开启expires后相关资源不显示的问题

    expires可以指定浏览器缓存,加快浏览速度 但是开启expires必须先指定root server中原来指定 location / { root D:/WWW; index index.html ...

  9. scala学习笔记-类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用

    转载自  fineqtbull   http://fineqtbull.iteye.com/blog/477994 有位je上的同学来短信向我问起了Scala类型参数中协变.逆变.类型上界和类型下界的 ...

  10. sql数据库监控语句

    --查找被阻塞进程 --查找阻塞头进程 and exists ( from master..sysprocesses where blocked =p.spid) --查找等待时间长的进程 order ...