Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
PolyORB-HI-Ada
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
Operations
Operations
Incidents
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
TASTE
PolyORB-HI-Ada
Commits
838d73a7
Commit
838d73a7
authored
Aug 30, 2013
by
yoogx
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* Add ISR_Task task kind for handling interrupts
parent
c724edac
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
275 additions
and
14 deletions
+275
-14
src/Makefile.am
src/Makefile.am
+15
-14
src/polyorb_hi-isr_task.adb
src/polyorb_hi-isr_task.adb
+158
-0
src/polyorb_hi-isr_task.ads
src/polyorb_hi-isr_task.ads
+102
-0
No files found.
src/Makefile.am
View file @
838d73a7
...
...
@@ -2,20 +2,21 @@ SUBDIRS = drivers
# BEGIN: DO NOT DELETE THIS LINE
ADA_SPECS_WITH_BODY
=
$(srcdir)
/polyorb_hi-aperiodic_task.ads
\
$(srcdir)
/polyorb_hi-background_task.ads
\
$(srcdir)
/polyorb_hi-hybrid_task.ads
\
$(srcdir)
/polyorb_hi-hybrid_task_driver.ads
\
$(srcdir)
/polyorb_hi-marshallers_g.ads
\
$(srcdir)
/polyorb_hi-messages.ads
\
$(srcdir)
/polyorb_hi-output.ads
\
$(srcdir)
/polyorb_hi-periodic_task.ads
\
$(srcdir)
/polyorb_hi-port_kinds.ads
\
$(srcdir)
/polyorb_hi-protocols.ads
\
$(srcdir)
/polyorb_hi-sporadic_task.ads
\
$(srcdir)
/polyorb_hi-suspenders.ads
\
$(srcdir)
/polyorb_hi-thread_interrogators.ads
\
$(srcdir)
/polyorb_hi-scheduler.ads
\
$(srcdir)
/polyorb_hi-utils.ads
$(srcdir)
/polyorb_hi-background_task.ads
\
$(srcdir)
/polyorb_hi-hybrid_task.ads
\
$(srcdir)
/polyorb_hi-hybrid_task_driver.ads
\
$(srcdir)
/polyorb_hi-isr_task.ads
\
$(srcdir)
/polyorb_hi-marshallers_g.ads
\
$(srcdir)
/polyorb_hi-messages.ads
\
$(srcdir)
/polyorb_hi-output.ads
\
$(srcdir)
/polyorb_hi-periodic_task.ads
\
$(srcdir)
/polyorb_hi-port_kinds.ads
\
$(srcdir)
/polyorb_hi-protocols.ads
\
$(srcdir)
/polyorb_hi-sporadic_task.ads
\
$(srcdir)
/polyorb_hi-suspenders.ads
\
$(srcdir)
/polyorb_hi-thread_interrogators.ads
\
$(srcdir)
/polyorb_hi-scheduler.ads
\
$(srcdir)
/polyorb_hi-utils.ads
ADA_SPECS
=
$(ADA_SPECS_WITH_BODY)
$(srcdir)
/polyorb_hi.ads
\
...
...
src/polyorb_hi-isr_task.adb
0 → 100644
View file @
838d73a7
------------------------------------------------------------------------------
-- --
-- PolyORB HI COMPONENTS --
-- --
-- P O L Y O R B _ H I . I S R _ T A S K --
-- --
-- B o d y --
-- --
-- Copyright (C) 2013 ESA & ISAE. --
-- --
-- PolyORB HI is free software; you can redistribute it and/or modify it --
-- under terms of the GNU General Public License as published by the Free --
-- Software Foundation; either version 2, or (at your option) any later. --
-- PolyORB HI is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY; without even the implied warranty of --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General --
-- Public License for more details. You should have received a copy of the --
-- GNU General Public License distributed with PolyORB HI; see file --
-- COPYING. If not, write to the Free Software Foundation, 51 Franklin --
-- Street, Fifth Floor, Boston, MA 02111-1301, USA. --
-- --
-- As a special exception, if other files instantiate generics from this --
-- unit, or you link this unit with other files to produce an executable, --
-- this unit does not by itself cause the resulting executable to be --
-- covered by the GNU General Public License. This exception does not --
-- however invalidate any other reasons why the executable file might be --
-- covered by the GNU Public License. --
-- --
-- PolyORB-HI/Ada is maintained by the TASTE project --
-- (taste-users@lists.tuxfamily.org) --
-- --
------------------------------------------------------------------------------
with
Ada
.
Synchronous_Task_Control
;
with
PolyORB_HI
.
Output
;
with
PolyORB_HI
.
Suspenders
;
package
body
PolyORB_HI
.
ISR_Task
is
use
PolyORB_HI
.
Errors
;
use
PolyORB_HI
.
Output
;
use
PolyORB_HI_Generated
.
Deployment
;
use
PolyORB_HI
.
Suspenders
;
use
Ada
.
Real_Time
;
use
Ada
.
Synchronous_Task_Control
;
-------------
-- Handler --
-------------
protected
body
Handler
is
----------
-- Wait --
----------
entry
Wait
when
ISR_Pending
is
begin
ISR_Pending
:=
False
;
end
Wait
;
------------
-- Handle --
------------
procedure
Handle
is
begin
ISR_Pending
:=
True
;
end
Handle
;
end
Handler
;
Next_Deadline_Val
:
Time
;
------------------
-- The_ISR_Task --
------------------
task
body
The_ISR_Task
is
Next_Start
:
Time
;
Error
:
Error_Kind
;
begin
-- Run the initialize entrypoint (if any)
Activate_Entrypoint
;
-- Wait for the network initialization to be finished
pragma
Debug
(
Put_Line
(
Verbose
,
"ISR Task "
&
Entity_Image
(
Entity
)
&
": Wait initialization"
));
Suspend_Until_True
(
Task_Suspension_Objects
(
Entity
));
-- delay until System_Startup_Time;
pragma
Debug
(
Put_Line
(
Verbose
,
"ISR task initialized for entity "
&
Entity_Image
(
Entity
)));
-- Main task loop
loop
pragma
Debug
(
Put_Line
(
Verbose
,
"ISR Task "
&
Entity_Image
(
Entity
)
&
": New Dispatch"
));
-- Block until an event is received
Handler
.
Wait
;
pragma
Debug
(
Put_Line
(
Verbose
,
"ISR Task "
&
Entity_Image
(
Entity
)
&
": received event"
));
-- Calculate the next start time according to the minimal
-- inter-arrival time.
Next_Start
:=
Ada
.
Real_Time
.
Clock
+
Task_Period
;
Next_Deadline_Val
:=
Ada
.
Real_Time
.
Clock
+
Task_Deadline
;
-- Execute the job
Error
:=
Job
;
if
Error
/=
Error_None
then
Recover_Entrypoint
;
end
if
;
-- Sleep to guarantee at least the minimal inter-arrival
-- time elapses.
delay
until
Next_Start
;
end
loop
;
end
The_ISR_Task
;
-------------------
-- Next_Deadline --
-------------------
function
Next_Deadline
return
Ada
.
Real_Time
.
Time
is
begin
return
Next_Deadline_Val
;
end
Next_Deadline
;
end
PolyORB_HI
.
ISR_Task
;
src/polyorb_hi-isr_task.ads
0 → 100644
View file @
838d73a7
------------------------------------------------------------------------------
-- --
-- PolyORB HI COMPONENTS --
-- --
-- P O L Y O R B _ H I . I S R _ T A S K --
-- --
-- S p e c --
-- --
-- Copyright (C) 2013 ESA & ISAE. --
-- --
-- PolyORB HI is free software; you can redistribute it and/or modify it --
-- under terms of the GNU General Public License as published by the Free --
-- Software Foundation; either version 2, or (at your option) any later. --
-- PolyORB HI is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY; without even the implied warranty of --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General --
-- Public License for more details. You should have received a copy of the --
-- GNU General Public License distributed with PolyORB HI; see file --
-- COPYING. If not, write to the Free Software Foundation, 51 Franklin --
-- Street, Fifth Floor, Boston, MA 02111-1301, USA. --
-- --
-- As a special exception, if other files instantiate generics from this --
-- unit, or you link this unit with other files to produce an executable, --
-- this unit does not by itself cause the resulting executable to be --
-- covered by the GNU General Public License. This exception does not --
-- however invalidate any other reasons why the executable file might be --
-- covered by the GNU Public License. --
-- --
-- PolyORB-HI/Ada is maintained by the TASTE project --
-- (taste-users@lists.tuxfamily.org) --
-- --
------------------------------------------------------------------------------
-- Sporadic threads are a little bit more complicated that periodic
-- ones. Their behaviour can be summerized as follows:
-- BEGIN LOOP
-- 1 - Blocks until a triggering event comes
-- 2 - Do the job
-- 3 - Sleep to guarantee that minimal inter-arrival time elapses
-- END LOOP
with
System
;
with
Ada
.
Real_Time
;
with
PolyORB_HI_Generated
.
Deployment
;
with
PolyORB_HI
.
Errors
;
with
Ada
.
Interrupts
;
use
Ada
.
Interrupts
;
with
Ada
.
Interrupts
.
Names
;
use
Ada
.
Interrupts
.
Names
;
generic
Entity
:
in
PolyORB_HI_Generated
.
Deployment
.
Entity_Type
;
-- So that the task know from which AADL entity it has been
-- mapped.
Task_Period
:
in
Ada
.
Real_Time
.
Time_Span
;
-- Task minimal inter-arrival time of events
Task_Deadline
:
in
Ada
.
Real_Time
.
Time_Span
;
-- Task deadline
Task_Priority
:
in
System
.
Any_Priority
;
-- Task priority
Task_Stack_Size
:
in
Natural
;
-- Task stack size
Interrupt_Identifier
:
in
Ada
.
Interrupts
.
Interrupt_ID
:=
SIGUSR1
;
with
function
Job
return
PolyORB_HI
.
Errors
.
Error_Kind
;
-- Parameterless procedure executed by the periodic task
with
procedure
Activate_Entrypoint
is
null
;
-- If given, the task run Activate_Entrypoint after the global
-- initialization and before the task main loop.
with
procedure
Recover_Entrypoint
is
null
;
-- If given, the task runs Recover_Entrypoint when an error is
-- detected.
package
PolyORB_HI
.
ISR_Task
is
protected
Handler
is
entry
Wait
;
procedure
Handle
;
pragma
Interrupt_Handler
(
Handle
);
pragma
Attach_Handler
(
Handle
,
Interrupt_Identifier
);
private
ISR_Pending
:
Boolean
:=
False
;
end
Handler
;
task
The_ISR_Task
is
pragma
Priority
(
Task_Priority
);
pragma
Storage_Size
(
Task_Stack_Size
);
end
The_ISR_Task
;
function
Next_Deadline
return
Ada
.
Real_Time
.
Time
;
-- Return the value of the next deadline (in absolute time)
end
PolyORB_HI
.
ISR_Task
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment