NetBurner 3.5.8
PDF Version
Toggle main menu visibility
stackFns.h
1
#ifndef __STACKFNS_H
2
#define __STACKFNS_H
3
/*NB_REVISION*/
4
5
/*NB_COPYRIGHT*/
6
#include <basictypes.h>
7
8
template
<
typename
rT,
typename
... Ts>
9
using
ArbFn_t = rT (*)(Ts...);
10
11
template
<
typename
rT,
typename
... Ts>
12
rT RunFnOnStack(ArbFn_t<rT, Ts...> fn, uint32_t *src, uint32_t *end, Ts... args)
13
{
14
uint32_t StackFunc[(((uint32_t)end) - ((uint32_t)src)) / 4 + 1];
15
ArbFn_t<rT, Ts...> pFn = (ArbFn_t<rT, Ts...>)(((uint32_t)StackFunc) | 1);
16
uint32_t *dst = StackFunc;
17
while
(src < end)
18
{
19
*dst++ = *src++;
20
}
21
asm
volatile
(
"dsb"
);
22
return
pFn(args...);
23
}
24
#endif
/* ----- #ifndef __STACKFNS_H ----- */
nbrtos
include
stackFns.h
Generated by
1.18.0