Ada有哪些RTOS可以使用开源/免费交叉编译器,支持多任务/多线程?
我有一个Atmel AT90USB162芯片,我想用Ada编程.我的第一个选择是使用AVR-Ada对其进行编程,但由于它没有任务支持,因此它是不可选择的(现在我对如何支持其任务转移没有任何线索).所以我需要一个更强大的方法.我想过使用QNX,但它比我的芯片架还要复杂得多.
我得到了AVR芯片支持uC/OS-II和FreeRTOS的信息.FreeRTOS或uC/OS-II有免费的Ada交叉编译器吗?
谢谢.
Ada中的以下源代码行,
type Airplane_ID is range 1..10;
,可以写成
type Airplane_ID is range 1..x;
,其中x是变量?我问这个是因为我想知道是否可以修改x的值,例如通过文本输入.提前致谢.
我正在编程中学习Ada 95,我想在我的MacBook上安装gnat编译器.我不知道在哪里可以获得一个好的gnat来编译我的代码,以及如何安装它.
我目前有gedit作为我的文本编辑器,因为这是我们在实验室环境中使用的.我是Mac世界的新手,所以任何帮助都会非常感激.
我来自嵌入式系统上的C/C++,并且我们在函数内部一直使用静态变量,以便在整个调用期间保留该值.
在Ada中,似乎只能使用等效的文件级静态变量来完成.是否有Ada等价物.
C++:
function Get_HW_Counter() {
   static int count = 0;
   return ++count;
}
阿达:??
我生活在一个非常安全/关键的 Ada-ic 环境中,并且养成了定义良好且有界的类型定义的习惯。我还遇到过很多 ASN1 使用/传播者。
我周围的一些人将 ASN1 定义为优于协议缓冲区的关键功能之一是能够定义并因此检查数据范围。
所以,
常见的数字类型定义(例如 int32、int64)超出了此处的范围。
我读过谷歌概述,发现没有提及任何数据范围定义。除了有关枚举管理/表示的功能以及一些排序功能之外。
为了提供一些其他参考,我听说/阅读了下面的链接,并了解了 Ada 实施项目。
这导致
http://www.diva-portal.org/smash/get/diva2:690878/FULLTEXT02.pdf
在 Linux 下运行的 Julia 程序中,我需要在调整控制台窗口大小时启动一个专用操作。那么在 Julia 中,我如何拦截系统信号 SIGWINCH(窗口大小调整)并将其附加到一个执行所需操作的函数上?
在 Ada 中,声明它相当简单:
 protected Signalhandler is
      procedure Handlewindowresizing;
      pragma Attach_Handler (Handlewindowresizing, SIGWINCH);
 end Signalhandler;
基于 SCHEMER 思想的暂定解决方案:我尝试使用 C 库进行 SIGWINCH 中断监视。
我的图书馆.h
void Winresize (void Sig_Handler());
我的图书馆
#include "myLibrary.h"
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
void Winresize(void sig_handler (void)) { 
     signal(SIGWINCH, sig_handler);
}
编译和库准备
gcc -c -Wall -fPIC myLibrary.c
gcc -shared -fPIC -o myLibrary.so myLibrary.o
使用 C-Library 的 Julia 程序:
function getc1()    
ret = ccall(:jl_tty_set_mode, Int32, (Ptr{Cvoid},Int32), stdin.handle, true)    
ret == 0 …当我在下面打印这个程序时 -
procedure put (Date:Date_Type) is
begin
  Put(Integer'Image(Date.Day)); --'
  Put("-");
  Put(Integer'Image(Date.Month)); --'
  Put("-");
  Put(Integer'Image(Date.Year)); --'
end;
结果是(例如):1- 1- 2010
我的问题是如何在每个Date值之前阻止一个字符的间距.(日月年).当然我正在使用日期程序,记录里面的日/月/年.
提前致谢.
我已经定义了
subtype String10 is String(1..10);
我试图获得键盘输入,而无需在输入之前手动输入空格.我尝试了get_line()但是由于某些原因它在输出get put()命令之前实际上不会等待输入,而且我也认为它会在那之前留下字符串中的内容并且不用空格填充它.
我知道并使用了Bounded_String和Unbounded_String,但我想知道是否有办法使这项工作.
我试过为它做一个函数:
--getString10--
procedure getString10(s : string10) is
   c : character;
   k : integer;
begin
   for i in integer range 1..10 loop
      get(c);
      if Ada.Text_IO.End_Of_Line = false then
         s(i) := c;
      else
         k := i;
         exit;
      end if;
   end loop;
   for i in integer range k..10 loop
      s(i) := ' ';
   end loop;
end getString10;
但是,在这里,我知道这s(i)不起作用,我不认为
"if Ada.Text_IO.End_Of_Line = false then" 
做我希望它会做什么.它只是一个占位符,而我正在寻找实际的方法.
我一直在搜索几个小时,但是Ada文档不像其他语言那样可用或清晰.我找到了很多关于获取字符串的内容,但不是我正在寻找的内容.
通过阅读文档我已经理解,Ada实时模块与操作系统完全隔离.没有底层操作系统和资源管理器就可以实现并发.Ada处理任务调度,时间管理,任务状态转换,列表管理,任务优先级,锁定策略,调度策略,ISR,任务间通信等.
如果是这样,那么Ada实时模块是一种实时操作系统?