跨平台(微控制器-PC)算法开发

时间:2010-12-20 16:13:54

标签: c network-programming cross-platform microcontroller

我被要求在C上开发网络应用算法。这个项目将在Linux for PC上开发,然后将转移到更便携的平台,包括微控制器。有许多微控制器/公司为TCP / IP提供非常好的大型库。该软件将保存有关网络性能的统计信息。

跨平台(uC-PC)的整个想法对我来说似乎很垃圾,因为最终代码应该以更具平台性的方式为微控制器编写,但无论如何我都不是专家。

有没有聪明的方法可以做到这一点,还是有人曾经这样做过?我的头脑风暴有“Wrapper library”和“Matlab”......有什么想法吗?

THX!

3 个答案:

答案 0 :(得分:1)

我在某种程度上同意你的观点 - 你确实希望目标系统和你在此期间开发的系统应尽可能接近(如果它们匹配则更好)。然而,跨平台的想法是让您在设计硬件时开始进行固件开发。而不是在Linux上做 - 我会做的是使用嵌入式操作系统模拟器。以下是步骤
- 步骤1:确定嵌入式系统的操作系统;确保操作系统有一个在PC上运行的模拟器(Win或Linux)带模拟器的典型嵌入式操作系统包括VxWorks,μC/ OS-II,QNX,uClinux ......同意操作系统意味着硬件设计团队知道操作系统是正确匹配正在设计的硬件,并且一致认为正在设计的硬件+ OS +应用程序将满足正在开发的系统的要求。
- 步骤2:使用此模拟器开发应用程序,直到设计的硬件出现为止 - 步骤3:一旦硬件的第一个版本准备好并且已经启动 - 您可以以最小的更改运行应用程序 - 通常不会对代码进行任何更改,但可能会更改正在使用的链接器/库。

如果做得正确,跨平台的想法具有巨大的优势 - 它有助于删除序列化项目开发活动。

鉴于您提到它是一个TCP / IP应用程序 - 检查Berkeley套接字支持并使用它。通常,如果您使用模拟器,此API应该无关紧要,在极端情况下,如果您因基于Berkeley套接字的应用程序可能更好的移植性而无需更改操作系统。

答案 1 :(得分:1)

假设您可以使用标准的BSD套接字库(系统调用是socket(),bind(),accept(),connect(),recv(),send(),以及各种选项)。任何具有TCP / IP堆栈的操作系统都将支持此标准API。

如果您的嵌入式系统使用类似* u * IP的运行到完成类型的TCP / IP堆栈,可能会遇到一些警告,但这些将很容易解决。

也只使用POSIX文件I / O(fopen,fread,fwrite,printf等)。但请记住,您的目标可能没有文件系统。

答案 2 :(得分:0)

如果使用模拟器不是一个选项,我会尝试将Linux功能包装在与嵌入式系统相匹配的接口中,如果可能的话。这样,系统中的任何额外批量都将在Linux开发系统上(这不受资源限制)。各种嵌入式操作系统和TCP / IP堆栈可以有很多不同的架构,因此它的容易程度从几乎不可能到根本不工作。

如果事实证明编写包装库使Linux看起来像嵌入式系统太困难了,那么我建议至少在编写Linux版本时考虑保持嵌入式操作系统,以便你可以尝试至少写一些功能使它们可以在两个系统上运行。

如果不花太长时间写一个Linux版本的至少部分代码可能会帮助你摆脱整体设计中的一些缺陷,至少。最多可以让您更快地测试系统的更改,因为将代码加载到嵌入式设备上通常需要的时间比您想要的多。在开发机器上调试也可能更容易。

某些嵌入式操作系统将在x86上运行,如果其中一些驱动程序允许它们在虚拟机中运行,我也不会感到惊讶,所以这也是一个选项。

要考虑的另一件事是开发机器的字节序和字大小与嵌入式系统相比。如果这些不同,那么您需要在编码时牢记这一点。在我最初编写代码时,获取此类内容比在我看来更容易返回并尝试修复代码更容易。