Ada程序适用于Linux但不适用于GPS Windows 10
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Ada程序适用于Linux但不适用于GPS Windows 10,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2264字,纯文字阅读大概需要4分钟。
内容图文
![Ada程序适用于Linux但不适用于GPS Windows 10](/upload/InfoBanner/zyjiaocheng/967/ab0f9cb4107547eb8e043ccbe29c9b2d.jpg)
在此先感谢您的帮助.我目前正在做一些关于ada编程的初学者工作,我已经安装了http://libre.adacore.com/download/configurations#的GNAT Programming Studio(GPS)
我有Windows 10 64位.我在学校给了以下代码:
pragma Task_Dispatching_Policy(FIFO_Within_Priorities);
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Real_Time; use Ada.Real_Time;
procedure PeriodicTasks is
Start : Time;
package Duration_IO is new Ada.Text_IO.Fixed_IO(Duration);
package Int_IO is new Ada.Text_IO.Integer_IO(Integer);
task type T(Id: Integer; Period : Integer) is
pragma Priority(Id);
end;
task body T is
Next : Time;
X : Integer;
begin
Next := Start;
loop
Next := Next + Milliseconds(Period);
-- Some dummy function
X := 0;
for Index in 1..5000000 loop
X := X + Index;
end loop;
Duration_IO.Put(To_Duration(Clock - Start), 3, 3);
Put(" : ");
Int_IO.Put(Id, 2);
Put_Line("");
delay until Next;
end loop;
end T;
-- Example Task
Task_P10 : T(10, 250);
Task_P12 : T(12, 500);
Task_P14 : T(14, 500);
Task_P16 : T(16, 250);
Task_P18 : T(18, 500);
Task_P20 : T(20, 250);
begin
Start := Clock;
null;
end PeriodicTasks;
我在GPS中打开文件,构建它(没有错误)并运行它但它没有显示任何打印输出.我听说有时你会遇到多核CPU的问题,所以每次打开gps.exe时,CPU亲和力都只设置为一个CPU,它总是“以管理员身份运行”.但是,这也没有用,我没有输出.
我决定使用Oracle Virtual Box并设置一个只有一个处理器的Ubuntu OS(32位).安装了GNAT工具,用gnatmake编译,用./periodictasks运行,然后猜猜是什么,程序做了它应该做的事情并打印出信息.
在这么长的故事之后,有人知道为什么会这样吗?可能是64位vs 32位情况?
非常感谢你!
解决方法:
直到最近,GNAT默认情况下都没有检查整数溢出.它确实检查了约束错误,例如将0分配给正数.
我们中的许多人认为这是编译器开发人员的一个奇怪的选择,因为它导致了许多问题,其根本原因是无法处理整数溢出.最近的变化让我们假设开发人员现在同意了!
由于声明,您的问题就出现了
for Index in 1..5000000 loop
X := X + Index;
end loop;
这将最终得到X~10 ^ 13,它不适合32位整数(它将适合64位整数,但如果不是所有GNAT平台,那将是一个Long_Long_Integer).
您的Windows编译器可能是GNAT GPL 2016,它显示了新行为,而Ubuntu编译器是较旧的FSF GCC.
您可以使用编译器开关-gnato0告诉Windows编译器使用旧行为.
您可以使用编译器开关-gnato告诉您的Ubuntu编译器使用新行为.
要获取有关任务中未处理的异常(否则会以静默方式死亡)的异常消息,您可以添加
GNAT.Exception_Traces.Trace_On (GNAT.Exception_Traces.Unhandled_Raise);
在主程序的开头.
内容总结
以上是互联网集市为您收集整理的Ada程序适用于Linux但不适用于GPS Windows 10全部内容,希望文章能够帮你解决Ada程序适用于Linux但不适用于GPS Windows 10所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。