&引用;windows.h";使用Eclipse SPARC bare-C编译器找不到

&引用;windows.h";使用Eclipse SPARC bare-C编译器找不到,c,eclipse,mingw,uart,sparc,C,Eclipse,Mingw,Uart,Sparc,好的,我正在尝试将一个模拟的(通过TSIM)LEON3处理器连接到UART终端。如果我没有弄错的话,我相信我需要编译一个C程序,使它能够与终端进行通信,因为我用另一种方式进行通信时遇到了困难。 我找到了一些UART通信的源代码,看起来一切正常。 但是,我在Eclipse中使用SPARC Bare C工具链编译它时遇到问题,因为它说windows.h文件不存在。现在我知道它存在了,因为我已经使用GCC工具链成功地编译了它,并且在web上找不到任何类似的案例来解释为什么会发生这种情况 是否有人遇到过

好的,我正在尝试将一个模拟的(通过TSIM)LEON3处理器连接到UART终端。如果我没有弄错的话,我相信我需要编译一个C程序,使它能够与终端进行通信,因为我用另一种方式进行通信时遇到了困难。
我找到了一些UART通信的源代码,看起来一切正常。
但是,我在Eclipse中使用SPARC Bare C工具链编译它时遇到问题,因为它说windows.h文件不存在。现在我知道它存在了,因为我已经使用GCC工具链成功地编译了它,并且在web上找不到任何类似的案例来解释为什么会发生这种情况

是否有人遇到过类似的问题或知道解决方法?
此外,如果您知道我在LEON3 UART通信方面做了错误的事情,请让我知道,我就离开。


谢谢。

BCC是一个交叉编译器针对独立的、基于LEON3和LEON4的环境。作为一个交叉编译器,它的任务是为不同于它运行的环境构建二进制文件

相关头文件描述程序在其运行时(目标)环境中可用的函数。交叉编译时,生成环境库及其标头是不相关的,因为生成环境和目标环境不同。BCC只公开其编译环境的头是正确的,该环境不提供Windows API函数。如果您试图构建的代码依赖于Windows API,那么您需要对其进行修改以删除该依赖项,或者查找其他内容

另一方面,我强烈怀疑你在这件事上走错了方向。特别是你说,

我相信我需要编译一个C程序,使它能够与终端进行通信

听起来你好像认为你将要建立某种帮助程序,但如果这是你的想法,那么要么你为错误的环境建立它,要么你的想法完全错误

如果您想要一个与模拟机器对话的Windows程序,那么您应该将其构建为一个Windows程序,而BCC不会这样做。在这种情况下,您应该使用MinGW的
gcc
,或者针对模拟器的主机环境使用另一个C编译器。此外,仿真环境的UART的主机端接口是仿真器的一个方面。我不知道您使用的是什么模拟器,但它可能不会将该接口的主机(Windows)端显示为UART,并且可能根本不需要使用Windows API

或者,如果您确实打算为独立的LEON3目标环境构建一个程序,那么您需要了解,当它运行时,它将是在该环境中运行的唯一程序。这就是“独立”的含义——底层没有操作系统,因此没有单独的进程,通常甚至没有多个执行线程。因此,您不需要助手程序;你只需要一个程序

讨论了那里可用的库,特别是描述了在这种环境中,文件I/O仅允许在标准输入和输出流(映射到UART A)上进行。因此,如果您使用BCC构建要在模拟器中运行的程序,那么您不需要在这方面做任何特殊的事情来与UART通信。您只需针对
stdin
stdout
使用stdio函数即可


第三方面,如果您在模拟环境中运行实际的操作系统,那么要构建在其上运行的程序,您应该在该环境中使用该环境的本机编译器,或者使用针对该托管环境的交叉编译器。不管怎样,BCC都不是这样的编译器,但GCC可能是。无论如何,由于Windows不在LEON3上运行,因此可以肯定地说,如果这是您正在尝试执行的操作,那么您仍然需要一些不依赖Windows API的操作。

感谢您提供详细的答案。我仍然不明白如何通过stdin/out访问发送/接收的数据?我用的是TSIM,它不是在模仿(我的错),而是在模仿LEON3。由于主机环境是windows,难道我不需要知道这些数据正在通过什么COM端口吗?@MrPhooky,“模拟”和“模拟”意味着非常接近同一件事,我的答案解释为在windows/x86(_64)上运行的虚拟机环境,并以LEON3的形式呈现给其中的任何人。这似乎是尖沙咀的准确特征。由BCC构建并在裸TSIM机器上运行的代码将通过读取stdin从该机器的UART a读取,并通过写入stdout向其写入。有关如何访问这些通道的另一侧,请参阅TSIM的文档。