-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy paths-fresem.adb
70 lines (63 loc) · 2.51 KB
/
s-fresem.adb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
-- Copyright (C) 2016 Free Software Foundation, Inc.
--
-- This file is part of the FreeRTOS-Ada project. This file 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 3, or (at your option) any
-- later version. This file 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.
--
-- As a special exception under Section 7 of GPL version 3, you are
-- granted additional permissions described in the GCC Runtime
-- Library Exception, version 3.1, as published by the Free Software
-- Foundation.
--
-- You should have received a copy of the GNU General Public License
-- and a copy of the GCC Runtime Library Exception along with this
-- program; see the files COPYING3 and COPYING.RUNTIME respectively.
-- If not, see <http://www.gnu.org/licenses/>.
package body System.FreeRTOS.Semaphores is
function Create_Semaphore return not null Semaphore_Handle is
function xSemaphoreCreateBinary return Semaphore_Handle
with
Import,
Convention => C,
External_Name => "_gnat_xSemaphoreCreateBinary";
Result : constant Semaphore_Handle := xSemaphoreCreateBinary;
begin
if Result = null then
raise Program_Error with "couldn't create semaphore";
end if;
return Result;
end Create_Semaphore;
procedure Give (The_Semaphore : not null Semaphore_Handle) is
function xSemaphoreGive (Semaphore : Semaphore_Handle) return Status_Code
with
Import,
Convention => C,
External_Name => "_gnat_xSemaphoreGive";
Status : Status_Code;
begin
Status := xSemaphoreGive (Semaphore => The_Semaphore);
if Status /= Pass then
raise Program_Error with "error giving semaphore";
end if;
end Give;
procedure Take (The_Semaphore : not null Semaphore_Handle) is
function xSemaphoreTake
(Semaphore : Semaphore_Handle;
Block_Time : Tick_Type) return Status_Code
with
Import,
Convention => C,
External_Name => "_gnat_xSemaphoreTake";
Status : Status_Code;
begin
Status := xSemaphoreTake (Semaphore => The_Semaphore,
Block_Time => Max_Delay);
if Status /= Pass then
raise Program_Error with "error taking semaphore";
end if;
end Take;
end System.FreeRTOS.Semaphores;