97 lines
2.7 KiB
C
97 lines
2.7 KiB
C
|
#ifndef BSP_GATE_H_
|
|||
|
#define BSP_GATE_H_
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
extern "C" {
|
|||
|
#endif
|
|||
|
|
|||
|
#include "kit_macro.h"
|
|||
|
|
|||
|
#define MODBUS_INSTANCE_NUM (5u)
|
|||
|
|
|||
|
typedef struct
|
|||
|
{
|
|||
|
uint16_t read_buf_idx;
|
|||
|
uint16_t write_buf_idx;
|
|||
|
uint16_t read_buf_size;
|
|||
|
uint16_t write_buf_size;
|
|||
|
uint16_t *read_buf;
|
|||
|
uint16_t *write_buf;
|
|||
|
|
|||
|
bool is_write_check;
|
|||
|
bool is_user_write_fun; //false 使用默认modbus写,无需自己实现,true需用自定义写配置函数
|
|||
|
|
|||
|
uint16_t write_data_addr_list[MODBUS_INSTANCE_NUM];
|
|||
|
struct _ModbusItem * write_data_mb_list[MODBUS_INSTANCE_NUM];
|
|||
|
}GateItem;
|
|||
|
|
|||
|
|
|||
|
#define GATE_STATIC_INIT(_name, _read_buf_size, _write_buf_size) \
|
|||
|
uint16_t _name##_read_buf[_read_buf_size]; \
|
|||
|
uint16_t _name##_write_buf[_write_buf_size]; \
|
|||
|
GateItem _name = \
|
|||
|
{ \
|
|||
|
(0), \
|
|||
|
(0), \
|
|||
|
(_read_buf_size), \
|
|||
|
(_write_buf_size), \
|
|||
|
(_name##_read_buf), \
|
|||
|
(_name##_write_buf), \
|
|||
|
}
|
|||
|
|
|||
|
#define GATE_STATIC_INIT_CCM(_name, _read_buf_size, _write_buf_size) \
|
|||
|
uint16_t _name##_read_buf[_read_buf_size] __attribute__((section (".CCM_RAM"))); \
|
|||
|
uint16_t _name##_write_buf[_write_buf_size] __attribute__((section (".CCM_RAM"))); \
|
|||
|
GateItem _name = \
|
|||
|
{ \
|
|||
|
(0), \
|
|||
|
(0), \
|
|||
|
(_read_buf_size), \
|
|||
|
(_write_buf_size), \
|
|||
|
(_name##_read_buf), \
|
|||
|
(_name##_write_buf), \
|
|||
|
}
|
|||
|
|
|||
|
#define GATE_STATIC_INIT2(_name, _read_buf_size, _write_buf_size) \
|
|||
|
uint16_t _name##_read_buf[_read_buf_size]; \
|
|||
|
GateItem _name = \
|
|||
|
{ \
|
|||
|
(0), \
|
|||
|
(0), \
|
|||
|
(_read_buf_size), \
|
|||
|
(_write_buf_size), \
|
|||
|
(_name##_read_buf), \
|
|||
|
(NULL), \
|
|||
|
}
|
|||
|
|
|||
|
#define GATE_STATIC_INIT2_CCM(_name, _read_buf_size, _write_buf_size) \
|
|||
|
uint16_t _name##_read_buf[_read_buf_size] __attribute__((section (".CCM_RAM"))); \
|
|||
|
GateItem _name __attribute__((section (".CCM_RAM"))) = \
|
|||
|
{ \
|
|||
|
(0), \
|
|||
|
(0), \
|
|||
|
(_read_buf_size), \
|
|||
|
(_write_buf_size), \
|
|||
|
(_name##_read_buf), \
|
|||
|
(NULL), \
|
|||
|
}
|
|||
|
|
|||
|
int16_t bsp_gate_get_read_buf_addr(GateItem *item, uint8_t len);
|
|||
|
int16_t bsp_gate_get_write_buf_addr(GateItem *item, uint8_t len);
|
|||
|
|
|||
|
uint16_t bsp_gate_get_read_data(GateItem *item, uint16_t addr);
|
|||
|
uint16_t bsp_gate_get_write_data(GateItem *item, uint16_t addr);
|
|||
|
bool bsp_gate_set_data(GateItem *item, uint16_t addr, uint16_t data);
|
|||
|
|
|||
|
void bsp_gate_push_read_data(GateItem *item, uint16_t addr, uint8_t *buf, uint8_t len);
|
|||
|
void bsp_gate_push_write_data(GateItem *item, uint16_t addr, uint8_t *buf, uint8_t len);
|
|||
|
uint16_t bsp_gate_copy_from_write_data(GateItem *item, uint8_t *buf);
|
|||
|
|
|||
|
bool bsp_gate_has_data_change(GateItem *item, uint16_t addr);
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
#endif
|