I-7188的奇怪行为

时间:2016-11-28 15:53:48

标签: c++98 borland-c++

我有非常复杂的I / O程序(由其他人编写)用于控制器ICPDAS i-7188ex,我正在为它编写一个库(.lib),它根据该程序的数据进行一些计算。

问题是,如果我只使用一行printf(" 123")导入函数并将其嵌入I / O中,程序会在某些时候崩溃。没有导入功能,I / O工作正常,没有I / O的导入功能也是如此。

也许这是一个内存问题,但为什么要为只输出字符串的函数分配相当大的内存?或者我完全错了?

我正在使用Borland C ++ 3.1。是的,我不能使用任何更新的东西,因为控制器只需要80186指令集。

1 个答案:

答案 0 :(得分:0)

如果你的代码很复杂,那么有时候你的编译器会卡住并错误地编译它会弄乱不可预知的行为。当代码增长时,我会多次发生...在这种情况下,通常交换几行代码(如果你可以不破坏功能)或甚至在代码中添加一些空或rem行有时会有所帮助。问题是找到它做它的地方。您还可以将程序分成几个文件,分别编译为obj,然后将它们链接到最终文件...

错误描述让我想起了我长时间打架的错误。如果您使用的是class/struct/template,请尝试以下操作:

可能会有所帮助(没有对旧涡轮增压器进行测试)。

嵌入I / O是什么意思?你在创建一个sys驱动程序文件?如果是这种情况,您需要确保没有弄乱CPU寄存器。这可能会导致很多问题尝试使用

void some_function_or_whatever()
 {
 asm { pusha };
 // here your code
 printf("123");
 asm { popa };
 }

如果您编写ISR handlers,则需要使用interrupt关键字,以便编译器正确返回。

没有实际代码和/或MCVE很难指出任何具体细节......

如果您可以将其移植到BDS2006或更新的版本(仅用于调试并不是真正的功能),那么它将更仔细地分析您的代码并且可以检测到许多隐藏的错误(当我从BCB系列移植到BDS2006时被支配)。编译器中还有CodeGuard选项,非常适合在运行时查找此类错误(但我担心如果没有模拟DOS中的I / O hw,您将无法运行lib)