source: EcnlProtoTool/trunk/asp3_dcre/mbed/mbed_stub.c@ 442

Last change on this file since 442 was 442, checked in by coas-nagasima, 4 years ago

ntshellアプリはnewlibを使うよう変更し、syscallの実装部分と区別がつくよう更新。

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 4.5 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2007-2016 by Embedded and Real-Time Systems Laboratory
7 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 *
9 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
10 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
11 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
12 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
13 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
14 * スコード中に含まれていること.
15 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
16 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
17 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
18 * の無保証規定を掲載すること.
19 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
20 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
21 * と.
22 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
23 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
24 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
25 * 報告すること.
26 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
27 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
28 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
29 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
30 * 免責すること.
31 *
32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
34 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
36 * の責任を負わない.
37 *
38 * $Id$
39 */
40
41/*
42 * カーネルのターゲット依存部(GR-PEACH用)
43 */
44
45#include <kernel.h>
46#include <sil.h>
47#include "us_ticker_api.h"
48#include "mbed_retarget.h"
49#include "kernel_cfg.h"
50#include "t_syslog.h"
51
52void wait_us(int us);
53
54void wait(float s)
55{
56 wait_us(s * 1000000.0f);
57}
58
59void wait_ms(int ms)
60{
61 wait_us(ms * 1000);
62}
63
64void wait_us(int us)
65{
66 ER ercd;
67
68 ercd = dly_tsk(us);
69 if (ercd == E_CTX){
70 uint32_t start = us_ticker_read();
71 while ((us_ticker_read() - start) < (uint32_t)us);
72 }
73}
74
75void sta_ker();
76
77void main()
78{
79 sta_ker();
80}
81
82void _exit(int status)
83{
84 ext_ker();
85}
86
87int malloc_lock_sem_count[TNUM_TSKID];
88
89void __malloc_lock(void * reent)
90{
91 ER ercd;
92 ID tskid = 0;
93
94 ercd = get_tid(&tskid);
95 if (ercd != E_OK) {
96 goto error;
97 }
98
99 if (malloc_lock_sem_count[tskid - 1] == 0) {
100 ercd = wai_sem(SEM_MALLOC);
101 if (ercd != E_OK) {
102 goto error;
103 }
104 }
105
106 malloc_lock_sem_count[tskid - 1]++;
107 return;
108error:
109 syslog(LOG_ERROR, "%s (%d) __malloc_lock error.",
110 itron_strerror(ercd), SERCD(ercd));
111 DebugBreak();
112}
113
114void __malloc_unlock(void * reent)
115{
116 ER ercd;
117 ID tskid = 0;
118 int count;
119
120 ercd = get_tid(&tskid);
121 if (ercd != E_OK) {
122 goto error;
123 }
124
125 malloc_lock_sem_count[tskid - 1]--;
126 if (malloc_lock_sem_count[tskid - 1] > 0)
127 return;
128
129 if (malloc_lock_sem_count[tskid - 1] < 0) {
130 goto error;
131 }
132
133 ercd = sig_sem(SEM_MALLOC);
134 if (ercd != E_OK) {
135 goto error;
136 }
137 return;
138error:
139 syslog(LOG_ERROR, "%s (%d) __malloc_unlock error.",
140 itron_strerror(ercd), SERCD(ercd));
141 DebugBreak();
142}
143
144extern uint32_t __HeapBase;
145extern uint32_t __HeapLimit;
146extern uint32_t __end__;
147
148void *_sbrk(int incr)
149{
150 static unsigned char *heap = (unsigned char *)&__end__;
151 unsigned char *prev_heap = heap;
152 unsigned char *new_heap = heap + incr;
153
154 if (new_heap >= (unsigned char *)&__HeapLimit) {
155 errno = ENOMEM;
156 return (void *) -1;
157 }
158
159 heap = new_heap;
160 return (void *) prev_heap;
161}
Note: See TracBrowser for help on using the repository browser.