uc/OS 仿真程序入门
在 vs2005 中,使用 uc/gui 库来编写 uc/os 的应用程序并在仿真器上运行。
一、新建 win32 控制台项目(也可以建立空项目);
二、将 Config, GUI, Simulation 文件夹拷贝到项目目录下,并添加到项目中(如下图);
三、项目属性/配置/c/c++/预编译头中,选择:不使用预编译头。此时可以将项目中的 stdafx.h
和 stdafx.cpp 移除。
四、工具/选项/vc++目录下,添加包含文件和库文件:
1
五、附加包含目录下,添加 GUI、Simulation、Config 文件夹的目录
五、由于是从 vc6.0 移植过来的,编译时会弹出 LIBC.lib 文件的错误,将其忽略掉,并添加
附加依赖项 odbc32.lib、odbccp32.lib、winmm.lib、msvcrt.lib:
2
六、设置子系统
3
最后,在 main.c 中添加如下代码:
void MainTask(void)
{
GUI_Init();
GUI_DispStringHCenterAt("HelloWorld!",100,50);
while(1);
}
编译运行后如下:
4
注:如果运行时弹出提示:
有三种解决办法:
1. 使用 Release版本;
5
2.
把多线程 dll(/MD)改为多线程(MT)再改回多线程 dll(/MD)就可以找到 DLL了。
(但是在有的机子上,重新生成后,在运行,还是会弹出之前的消息框)
3. 改嵌入清单为否
6
附录:
在 VS 2005 中建立 Win32 工程时(以 VS 2005 中文版为例),你可能会遇到这样的运行错误:“没有
找到 MSVCP80D.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。”(还可能是其
它几个类似的文件:MSVCR80D.dll、MSVCM80D.dll)。对于 VS2005 新手,可能遇到的第一个问题便是
此问题。
VS 2005 在生成可执行文件时使用了一种新的技术,该技术生成的可执行文件会伴随生成一个清单文
件(manifest file)(.manifest 后缀文件)(其本质上是 XML 文档,你可以用文本编辑器打开看看),并在
链接完成后将该清单文件嵌入到 exe 文件中(默认情况下)。而在 FAT32 文件系统中,在处理清单文件阶
段,当增量链接时不能完成清单文件的更新(默认情况下),于是造成清单文件嵌入失败,从而使该 exe
文件运行时没有相应的清单文件而运行失败并提示如上错误。 解决方案很多,列举如下:
1. 由于这是在链接动态运行库出现的问题,所以你可以选择代码生成的连接方式为/MTd 而非/MDd,不用
这些 DLL 文件从而避免问题的出现。该方法有一个很显然的缺点:适用范围有限,并且也不是我等提倡的
解决问题的方式,不推荐该方法。 2. 既然跟 FAT32 系统有关,那么我们可以选择在 NTFS 文件系统中开
发从而避免该问题,此方法同上,也是采用的回避问题的方式,不为我等提倡。 3. 该方法仍与 FAT32 有
7
关:在项目的“属性|配置属性|清单工具|常规”中的“使用 FAT32 解决办法”选择“是”(默认为“否”),重新
生成项目即可解决问题。该方法是唯一真正针对问题所在而提出的解决方法,使清单工具可以正确更新。
(此方法是官方解决方法,也比较方便,推荐) 4. 既然问题是在更新嵌入的清单文件时发生的,由于 FAT32
的原因而未能更新嵌入的清单文件,于是我们有如下两种解决方法:
(1)不启用增量链接。在项目的“属性|配置属性|链接器|常规”中的“启用增量链接”选择“否”。此方法阻
断了问题产生的源头,其每次生成 exe 文件时都直接嵌入清单文件,而不是默认的根据时戳而决定是否更
新清单文件。
(2)不嵌入清单文件。在项目的“属性|配置属性|清单工具|输入和输出”中的“嵌入清单”选择“否”,从而
在生成 exe 文件时附随生成一个清单文件(默认情况下,其文件名为 exe 文件的全名加上“.manifest”),避
免了嵌入清单文件可能失败的问题。在程序运行时,会用到该清单文件。显然,这种方式使可执行程序产
生了更多的外部依赖,不推荐。
另外,还有一个不能称为方法的土办法:每次 Build 前手动删除*.ilk 文件(增量链接文件)(当然可以在项
目属性中写入删除命令,使其自动执行),不推荐该土办法。 最后,总结一下: 1. 此问题只在特定条件
下才会出现:在 FAT32 文件系统中编译、默认设置(增量模式、不启用 FAT32 解决方案、嵌入清单文件)、
非第一次生成可执行文件文件(即在增量连接、更新清单文件时)。 2. 解决方案 1 和 4.1 方便实用,推荐
使用。
8