stm32f407-openocd/Core/Inc/cmd_call.h

52 lines
1.1 KiB
C
Raw Normal View History

2024-06-20 08:28:15 +00:00
#ifndef USER_CALL_H
#define USER_CALL_H
/**
* How to use this driver
* 1. add follows to SECTIONS in link.ld such us "STM32F407ZGTx_FLASH.ld"
*
..........................
SECTIONS
{
...
.text{:
. = ALIGN(4);
__cmd_call_start = .;
KEEP(*(__cmd_call))
__cmd_call_end = .;
. = ALIGN(4);
..................
* 2. use CMD_EXPORT to bangding the cmd and function
exanple
#define CMD_ADC 1
int abc_deal(void){
return 0;
}
CMD_EXPORT(CMD_ADC,abc_deal);
* 3. add
*/
typedef struct cfg_call_t
{
int __cmd;
int (*__func)(void);
}cfg_call_t;
#if defined(__CC_ARM) || defined(__CLANG_ARM) || defined(__GNUC__) || defined(__ADSPBLACKFIN__)
#define __SECTION(x) __attribute__((section(x)))
#define __USED __attribute__((used))
#elif defined(__IAR_SYSTEMS_ICC__)
#define __SECTION(x) @x
#define __USED __root
#else
#define __SECTION(x)
#define __USED
#endif
#define CMD_EXPORT(cmd, fuction) __USED const cfg_call_t cmd##_func __SECTION("__cmd_call") = { \
.__cmd = cmd, \
.__func = fuction}
#endif