summaryrefslogtreecommitdiff
path: root/task_priority/task_priority.adb
diff options
context:
space:
mode:
Diffstat (limited to 'task_priority/task_priority.adb')
-rw-r--r--task_priority/task_priority.adb62
1 files changed, 62 insertions, 0 deletions
diff --git a/task_priority/task_priority.adb b/task_priority/task_priority.adb
new file mode 100644
index 0000000..c4c5d64
--- /dev/null
+++ b/task_priority/task_priority.adb
@@ -0,0 +1,62 @@
+--
+-- Demonstrate Task Priority
+--
+--
+--High: 17
+--HighNative: ID=0x0B010004
+-- 238
+--Low: 16
+--LowNative: ID=0x0B010003
+-- 239
+
+
+with Text_IO; use Text_IO;
+with Ada.Dynamic_Priorities; use Ada.Dynamic_Priorities;
+with System;
+with Interfaces.C;
+
+procedure Task_Priority is
+
+ procedure Put_Priority is
+ function getPriority return Interfaces.C.int;
+ pragma Import (C, getPriority, "getPriority");
+ begin
+ Put_Line (Interfaces.C.int'Image (getPriority));
+ end Put_Priority;
+
+ -- I think 16 > 17 to Ada
+ task Low_Task is
+ pragma Priority(16);
+ end Low_Task;
+
+ task High_Task is
+ pragma Priority(17);
+ end High_Task;
+
+ task body High_Task is
+ begin
+ Put_Line ( "High: " & System.Any_Priority'Image (Get_Priority));
+ Put ( "HighNative: " );
+ Put_Priority;
+ loop
+ delay 1.0;
+ Put_Line ("High - Waking up");
+ end loop;
+ end High_Task;
+
+ task body Low_Task is
+ procedure empty;
+ pragma Import (C, empty, "empty");
+ begin
+ Put_Line ( "Low: " & System.Any_Priority'Image (Get_Priority));
+ Put ( "LowNative: " );
+ Put_Priority;
+ delay 0.1;
+ loop
+ empty;
+ end loop;
+ end Low_Task;
+
+begin
+ NULL;
+end Task_Priority;