Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
src/kernel/syscalls.c@0:ccdea31d8eba, 2019-08-23 (annotated)
- Committer:
- gawas
- Date:
- Fri Aug 23 16:43:44 2019 +0000
- Revision:
- 0:ccdea31d8eba
init funtion;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| gawas | 0:ccdea31d8eba | 1 | #include <stm32f4xx.h> |
| gawas | 0:ccdea31d8eba | 2 | #include <sys/stat.h> |
| gawas | 0:ccdea31d8eba | 3 | #include <unistd.h> |
| gawas | 0:ccdea31d8eba | 4 | |
| gawas | 0:ccdea31d8eba | 5 | #include "drivers/uart.h" |
| gawas | 0:ccdea31d8eba | 6 | |
| gawas | 0:ccdea31d8eba | 7 | #define STACK_POINTER (__get_MSP()) |
| gawas | 0:ccdea31d8eba | 8 | #define UART_AUTO_ECHO |
| gawas | 0:ccdea31d8eba | 9 | |
| gawas | 0:ccdea31d8eba | 10 | |
| gawas | 0:ccdea31d8eba | 11 | int _close(int file) |
| gawas | 0:ccdea31d8eba | 12 | { |
| gawas | 0:ccdea31d8eba | 13 | UNUSED(file); |
| gawas | 0:ccdea31d8eba | 14 | return -1; |
| gawas | 0:ccdea31d8eba | 15 | } |
| gawas | 0:ccdea31d8eba | 16 | |
| gawas | 0:ccdea31d8eba | 17 | |
| gawas | 0:ccdea31d8eba | 18 | int _fstat(int file, struct stat *st) |
| gawas | 0:ccdea31d8eba | 19 | { |
| gawas | 0:ccdea31d8eba | 20 | UNUSED(file); |
| gawas | 0:ccdea31d8eba | 21 | st->st_mode = S_IFCHR; |
| gawas | 0:ccdea31d8eba | 22 | return 0; |
| gawas | 0:ccdea31d8eba | 23 | } |
| gawas | 0:ccdea31d8eba | 24 | |
| gawas | 0:ccdea31d8eba | 25 | |
| gawas | 0:ccdea31d8eba | 26 | int _isatty(int file) |
| gawas | 0:ccdea31d8eba | 27 | { |
| gawas | 0:ccdea31d8eba | 28 | switch(file) { |
| gawas | 0:ccdea31d8eba | 29 | case 1: // stdio |
| gawas | 0:ccdea31d8eba | 30 | case 2: // stderr |
| gawas | 0:ccdea31d8eba | 31 | return 1; |
| gawas | 0:ccdea31d8eba | 32 | |
| gawas | 0:ccdea31d8eba | 33 | default: return 0; |
| gawas | 0:ccdea31d8eba | 34 | } |
| gawas | 0:ccdea31d8eba | 35 | } |
| gawas | 0:ccdea31d8eba | 36 | |
| gawas | 0:ccdea31d8eba | 37 | |
| gawas | 0:ccdea31d8eba | 38 | int _lseek(int file, int ptr, int dir) |
| gawas | 0:ccdea31d8eba | 39 | { |
| gawas | 0:ccdea31d8eba | 40 | UNUSED(file); UNUSED(ptr); UNUSED(dir); |
| gawas | 0:ccdea31d8eba | 41 | return 0; |
| gawas | 0:ccdea31d8eba | 42 | } |
| gawas | 0:ccdea31d8eba | 43 | |
| gawas | 0:ccdea31d8eba | 44 | |
| gawas | 0:ccdea31d8eba | 45 | int _open(const char *name, int flags, int mode) |
| gawas | 0:ccdea31d8eba | 46 | { |
| gawas | 0:ccdea31d8eba | 47 | UNUSED(name); UNUSED(flags); UNUSED(mode); |
| gawas | 0:ccdea31d8eba | 48 | return -1; |
| gawas | 0:ccdea31d8eba | 49 | } |
| gawas | 0:ccdea31d8eba | 50 | |
| gawas | 0:ccdea31d8eba | 51 | |
| gawas | 0:ccdea31d8eba | 52 | int _read(int file, char *ptr, int len) |
| gawas | 0:ccdea31d8eba | 53 | { |
| gawas | 0:ccdea31d8eba | 54 | UNUSED(file); |
| gawas | 0:ccdea31d8eba | 55 | int i; |
| gawas | 0:ccdea31d8eba | 56 | for (i = 0; i < len; i++) { |
| gawas | 0:ccdea31d8eba | 57 | ptr[i] = _uart_getc(); |
| gawas | 0:ccdea31d8eba | 58 | #ifdef UART_AUTO_ECHO |
| gawas | 0:ccdea31d8eba | 59 | _uart_putc(ptr[i]); |
| gawas | 0:ccdea31d8eba | 60 | #endif |
| gawas | 0:ccdea31d8eba | 61 | /* Return partial buffer if we get EOL */ |
| gawas | 0:ccdea31d8eba | 62 | if ('\r' == ptr[i]) { |
| gawas | 0:ccdea31d8eba | 63 | ++i; |
| gawas | 0:ccdea31d8eba | 64 | ptr[i] = '\n'; |
| gawas | 0:ccdea31d8eba | 65 | return i; |
| gawas | 0:ccdea31d8eba | 66 | } |
| gawas | 0:ccdea31d8eba | 67 | } |
| gawas | 0:ccdea31d8eba | 68 | |
| gawas | 0:ccdea31d8eba | 69 | ptr[i-1] = '\r'; |
| gawas | 0:ccdea31d8eba | 70 | ptr[i] = '\n'; |
| gawas | 0:ccdea31d8eba | 71 | return i; |
| gawas | 0:ccdea31d8eba | 72 | } |
| gawas | 0:ccdea31d8eba | 73 | |
| gawas | 0:ccdea31d8eba | 74 | |
| gawas | 0:ccdea31d8eba | 75 | caddr_t _sbrk(int incr) |
| gawas | 0:ccdea31d8eba | 76 | { |
| gawas | 0:ccdea31d8eba | 77 | extern char _end; /* Defined by the linker */ |
| gawas | 0:ccdea31d8eba | 78 | static char *heap_end; |
| gawas | 0:ccdea31d8eba | 79 | char *prev_heap_end; |
| gawas | 0:ccdea31d8eba | 80 | |
| gawas | 0:ccdea31d8eba | 81 | if (heap_end == 0) { |
| gawas | 0:ccdea31d8eba | 82 | heap_end = &_end; |
| gawas | 0:ccdea31d8eba | 83 | } |
| gawas | 0:ccdea31d8eba | 84 | prev_heap_end = heap_end; |
| gawas | 0:ccdea31d8eba | 85 | if ((unsigned)(heap_end + incr) > STACK_POINTER) { |
| gawas | 0:ccdea31d8eba | 86 | /* Heap and stack collision */ |
| gawas | 0:ccdea31d8eba | 87 | return (caddr_t)0; |
| gawas | 0:ccdea31d8eba | 88 | } |
| gawas | 0:ccdea31d8eba | 89 | |
| gawas | 0:ccdea31d8eba | 90 | heap_end += incr; |
| gawas | 0:ccdea31d8eba | 91 | return (caddr_t) prev_heap_end; |
| gawas | 0:ccdea31d8eba | 92 | } |
| gawas | 0:ccdea31d8eba | 93 | |
| gawas | 0:ccdea31d8eba | 94 | |
| gawas | 0:ccdea31d8eba | 95 | int _write(int file, char *ptr, int len) |
| gawas | 0:ccdea31d8eba | 96 | { |
| gawas | 0:ccdea31d8eba | 97 | if (!isatty(file)) { |
| gawas | 0:ccdea31d8eba | 98 | return BSP_UARTx_transmit((uint8_t*)ptr, len) == 0 ? len : 0; |
| gawas | 0:ccdea31d8eba | 99 | } |
| gawas | 0:ccdea31d8eba | 100 | |
| gawas | 0:ccdea31d8eba | 101 | int todo; |
| gawas | 0:ccdea31d8eba | 102 | for (todo = 0; todo < len; todo++) { |
| gawas | 0:ccdea31d8eba | 103 | const char c = *ptr++; |
| gawas | 0:ccdea31d8eba | 104 | if (c == '\n') BSP_UARTx_transmit((uint8_t*)&(char){'\r'}, 1); |
| gawas | 0:ccdea31d8eba | 105 | if (BSP_UARTx_transmit((uint8_t*)&c, 1) != 0) break; |
| gawas | 0:ccdea31d8eba | 106 | } |
| gawas | 0:ccdea31d8eba | 107 | |
| gawas | 0:ccdea31d8eba | 108 | return todo; |
| gawas | 0:ccdea31d8eba | 109 | } |
| gawas | 0:ccdea31d8eba | 110 | |
| gawas | 0:ccdea31d8eba | 111 | |
| gawas | 0:ccdea31d8eba | 112 | void _init(void) {} |
| gawas | 0:ccdea31d8eba | 113 |