_【@. 目录】
【@.3 Visual Studio工程建立】
这里用Visual Studio绝对是那大炮打蚊子,浪费资源。谁会专门为了写几句代码安装一个庞大的Visual Studio噢。不过按照国内现在的大学教育来看,写C程序出了VC就是Visual Studio,真正在大学内能学会一些开源编译器如gcc的只有一小部分人了。所以说微软造就了一大批Microsoft系软件依赖者(比如说我 (..´Д⊂))。我喜欢用Visual Studio的更重要的原因是,他的代码提示功能太强大了,简直就是我们这些编程小白的福音。对于类、结构之类的,有智能提示方便知道成员名,如下↓
这里把Visual Studio配置为一个类似于Eclipse的Shell壳软件,为的就是代替没有智能提示的Keil,让熟悉VS的人能快速的开发STM32代码。当然等有时间我会再看看怎么直接用VS调用gcc或者armcc编译器来进行开发,完全抛开MDK。但是鉴于MDK里强大的仿真功能,我觉得这条路一时半会儿不在我视野里。
一. 建立目录
@->打开Visual Studio,点击File->New->Project新建一个工程。选择Visual C++语言,建立一个空工程就好了。工程建立在工程目录下的"Solution\VS"里面,工程名取为"STM32F10x_VS",确定。
建立好之后先什么都不要改,关闭Visual Studio。打开之前的"Solution\VS"目录,你会发现其中多了一个STM32F10x_VS的文件夹。再点进去就是我们的Visual Studio的工程目录。如图所示↓
这里为了方便,将原本在STM32F10x_VS目录下的文件全部拷出来,放到上一级的VS文件夹下,再把原本的STM32F10x_VS删除,使得一打开"Solution\VS"目录就可以看到VS的.sln工程文件,如下图所示↓
@->重新打开"STM32F10x.sln"文件,默认Solution Explorer中文件结构如下↓
现在将其中的"Header Files","Resource Files","Source Files"删除掉。"External Dependencies"文件夹是删除不掉的。按照MDK中的Project目录格式,右击工程名->Add->New Filter,逐一新建文件夹"User","STM32_LIB","STM32_STARTUP","CMSIS"。
按照之前建立Keil工程的文件目录,右击文件夹->Add->Existing Item,往新建的四个文件夹中逐一添加文件,这里不再累述。最后比较下MDK中和Visual Studio中的文件目录,应该是一样的,只是顺序不一样而已。
这里注意,由于Visual Studio和MDK中包含的这些文件都是相对引用路劲,所以添加时要小心,保证一致。虽然实际上你可以不按照这样的文件结构在VIsual Studio中添加文件,但是为了编辑统一,最好还是使二者保持一致。
二. 包含路径
@->右击工程名(注意不是上面那个Solution名)->Properties。弹出的工程属性对话框中首先选择Configuration下拉框选中All Configuration。这里说明一下,虽然我们在VS里面重来不编译,但是为了防止到时候手滑不小心在VS工具栏中Build按钮旁的配置下拉框中选到了其他配置而导致失败,还是在这里把All Configuration选中吧。
@->点击左侧边栏->Configuration Properties->C/C++->General,看到右侧第一栏的Additional Include Directories,这里就是我们将要添加包含头文件路劲的地方。↓
好了,这里可以点击每一栏右侧的浏览器文件目录按钮,但是注意这里如果通过文件目录区选择头文件包含路劲的话将得到的是绝对路劲,若我们的工程文件夹换一个地方,那么有可能头文件会找不到。这是我们不想看到的。所以这里最好手动输入相对路劲。相对路径的输入规则跟一般写脚本等的相对路劲规则一样,这里可以简单的输入"..\",对话框里就会出现路劲提示。按照之前MDK中的路劲设置规则,输入四条路径如下↓
不过若这时候你随便打开一个文件,比如"stm32f10x_gpio.c"拉到开头看头文件,会发现提示找不到头文件。这是因为这里的文件包含路径不对。还记的一开始我们把本来包含在工程文件夹下的文件提升了一层吗?我怀疑就是那里出了问题。所以最终的路径应该是每条路径前面多加一个"..\",如下↓
..\..\..\Libraries\CMSIS\CM3\CoreSupport
..\..\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x
..\..\..\Libraries\STM32F10x_StdPeriph_Driver\inc
..\..\..\User\inc
好了确定保存。回头在来看看,发现头文件已经包含进来了。这个时候可以右击头文件包含的预定义,看看那是否能打开对应的文件,如果路径设置都没问题的话将会成功打开对应路径↓
之后可以试着检查文件中的一些结构体是否可以定位到各自的定义处。可以还是在"stm32f10x_gpio.c"中,随便找个函数内部的结构体,试着右击->Go to Definition。如果路径设置正确的话将定位到其定义处。
另外,若智能识别不灵时可以右击工程->Rescan Solution,可让智能识别Intellisense重新扫描。↓
@->最后,为了让工程目录更干净,做一些修改。点击菜单栏Tools->Options,找到左边的Text Editor->C/C++->Advanced,在右边选中Fallback Location中确保前两项Always Use Fallback Location 和 Do Not Warn If Fallback Location Used为True。最后的Fallback Location 可以什么都不填,这样一些IntelliSense产生的数据将保存在系统缓存中。↓
可以试着将那两项设为False,那么工程目录下将会产生一个.sdf的文件和一个ipch的文件夹,体积还挺大的,而且随着工程使用时间增加这个文件的体积还会增大。这也是我们不希望出现的。所以最好确保之前的两项为True。
@->到此为止就可以利用Visual Studio编辑代码了。这时可以同时打开工程目录下的Keil工程文件"STM32F10x_MDK.uvproj"和VIsual Studio工程文件"STM32F10x_VS.sln",随便在其中任意一个编辑环境中修改一个文件,切换到另一个编辑环境时会自动提示文件在外部修改,是否重新载入。非常方便是不是。
@.[FIN] @.date->Nov 21, 2012 @.author->apollius