| 99 |
theseven |
1 |
#include "syscallwrappers.h"
|
|
|
2 |
|
|
|
3 |
|
| 453 |
theseven |
4 |
#define EMCORE_APP_HEADER(threadnamestr, mainfunc, threadprio) \
|
|
|
5 |
void __attribute__((section(".emcoreentrypoint"))) __emcore_entrypoint() \
|
| 116 |
theseven |
6 |
{ \
|
| 427 |
farthen |
7 |
asm volatile("swi\t2\n\tldr\tr3, =__emcore_required_version\nldr\tr3, [r3]\n\t" \
|
| 299 |
theseven |
8 |
"ldr\tr2, [r0]\n\tcmp\tr3, r2\n\tldrls\tr1, [r0,#4]\n\tcmpls\tr1, r3\n\t" \
|
| 427 |
farthen |
9 |
"movhi\tr0, #0\n\tldrhi\tr1, =__emcore_incompatible_api_str\n\t" \
|
|
|
10 |
"swihi\t1\n\tldr\tr1, =__emcore_syscall\n\tstr\tr0, [r1]\n\t" \
|
| 538 |
theseven |
11 |
"b\t__emcore_entrypoint_c\n\t.ltorg\n__emcore_entrypoint_c:\n\t" \
|
| 116 |
theseven |
12 |
::: "r0", "r1", "r2", "r3", "r12", "lr", "cc", "memory"); \
|
| 453 |
theseven |
13 |
thread_set_name(NULL, threadnamestr); \
|
|
|
14 |
thread_set_priority(NULL, threadprio); \
|
| 116 |
theseven |
15 |
mainfunc(); \
|
|
|
16 |
} \
|
| 453 |
theseven |
17 |
struct emcore_syscall_table* __emcore_syscall; \
|
| 427 |
farthen |
18 |
const uint32_t __emcore_required_version = EMCORE_API_VERSION; \
|
|
|
19 |
const char __emcore_incompatible_api_str[] = "Incompatible API version!\nGot %d, need %d";
|
| 489 |
theseven |
20 |
|
|
|
21 |
|
|
|
22 |
extern struct emcore_syscall_table* __emcore_syscall;
|