You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

309 lines
10 KiB

  1. #ifndef APP_RUNTIME_TEST_MAIN_H
  2. #define APP_RUNTIME_TEST_MAIN_H
  3. #include <stdint.h>
  4. #include "modbus.h"
  5. #define CPU_CFG_KA_IPL_BOUNDARY (4U)
  6. #define APP_TASK_MODBUS_PRIO (4U)
  7. #define APP_TASK_START_PRIO (5U)
  8. #define APP_TASK_T35_PRIO (6U)
  9. #define APP_TASK_START_STK_SIZE (128U)
  10. #define APP_TASK_MODBUS_STK_SIZE (384U)
  11. #define APP_TASK_T35_STK_SIZE (128U)
  12. #define APP_MODBUS_BAUD_RATE (115200U)
  13. #define APP_MODBUS_BITS_PER_CHARACTER (10U)
  14. #define APP_MODBUS_RTU_CHARACTER_TIME_US (87U)
  15. #define APP_MODBUS_RTU_T15_US (750U)
  16. #define APP_MODBUS_RTU_T35_US (1750U)
  17. #define APP_MODBUS_RTU_T15_RX_TIMEOUT_US (837U)
  18. #define APP_MODBUS_RTU_T35_AFTER_T15_US (913U)
  19. #define APP_MODBUS_RTU_TIMER_CLOCK_HZ (84000000U)
  20. #define APP_MODBUS_RTU_TIMER_TICK_HZ (1000000U)
  21. #define APP_MODBUS_STATUS_CHECK_TICKS (1U)
  22. #define APP_MODBUS_STATUS_UPDATE_TICKS (100U)
  23. #define APP_MODBUS_LINK_TIMEOUT_TICKS (3000U)
  24. #define APP_MODBUS_TX_TIMEOUT_TICKS (100U)
  25. #define APP_MODBUS_DEBUG_REGISTER_COUNT (16U)
  26. #define APP_MODBUS_DEBUG_COIL_COUNT (16U)
  27. #define APP_MODBUS_DEBUG_FRAME_SIZE (256U)
  28. #define APP_MODBUS_OUTPUT_COIL_COUNT (8U)
  29. #define APP_MODBUS_FIRST_USER_OUTPUT_COIL (1U)
  30. #define APP_MODBUS_USER_OUTPUT_COIL_COUNT (7U)
  31. #define APP_MODBUS_LINK_STATE_COIL (100U)
  32. #define APP_MODBUS_LINK_DISCONNECTED (0U)
  33. #define APP_MODBUS_LINK_CONNECTED (1U)
  34. typedef uint8_t INT8U;
  35. typedef uint16_t INT16U;
  36. typedef uint32_t INT32U;
  37. typedef uint32_t OS_STK;
  38. typedef uint32_t OS_CPU_SR;
  39. typedef struct
  40. {
  41. uint8_t value;
  42. } OS_EVENT;
  43. typedef int32_t IRQn_Type;
  44. typedef struct
  45. {
  46. uint32_t CR1;
  47. uint32_t CNT;
  48. uint32_t ARR;
  49. uint32_t SR;
  50. uint32_t PSC;
  51. uint32_t EGR;
  52. uint32_t DIER;
  53. } TIM_TypeDef;
  54. typedef struct
  55. {
  56. uint32_t value;
  57. } GPIO_TypeDef;
  58. typedef struct
  59. {
  60. uint32_t value;
  61. uint32_t SR;
  62. uint32_t DR;
  63. } USART_TypeDef;
  64. typedef struct
  65. {
  66. uint32_t PLLState;
  67. uint32_t PLLSource;
  68. uint32_t PLLM;
  69. uint32_t PLLN;
  70. uint32_t PLLP;
  71. uint32_t PLLQ;
  72. } RCC_PLLInitTypeDef;
  73. typedef struct
  74. {
  75. uint32_t OscillatorType;
  76. uint32_t HSEState;
  77. RCC_PLLInitTypeDef PLL;
  78. } RCC_OscInitTypeDef;
  79. typedef struct
  80. {
  81. uint32_t ClockType;
  82. uint32_t SYSCLKSource;
  83. uint32_t AHBCLKDivider;
  84. uint32_t APB1CLKDivider;
  85. uint32_t APB2CLKDivider;
  86. } RCC_ClkInitTypeDef;
  87. typedef struct
  88. {
  89. uint32_t Pin;
  90. uint32_t Mode;
  91. uint32_t Pull;
  92. uint32_t Speed;
  93. uint32_t Alternate;
  94. } GPIO_InitTypeDef;
  95. typedef struct
  96. {
  97. uint32_t BaudRate;
  98. uint32_t WordLength;
  99. uint32_t StopBits;
  100. uint32_t Parity;
  101. uint32_t Mode;
  102. uint32_t HwFlowCtl;
  103. uint32_t OverSampling;
  104. } UART_InitTypeDef;
  105. typedef struct
  106. {
  107. void *Instance;
  108. UART_InitTypeDef Init;
  109. uint32_t ErrorCode;
  110. uint32_t RxState;
  111. } UART_HandleTypeDef;
  112. typedef enum
  113. {
  114. HAL_OK = 0,
  115. HAL_ERROR = 1,
  116. HAL_BUSY = 2,
  117. HAL_TIMEOUT = 3
  118. } HAL_StatusTypeDef;
  119. typedef enum
  120. {
  121. GPIO_PIN_RESET = 0,
  122. GPIO_PIN_SET = 1
  123. } GPIO_PinState;
  124. extern TIM_TypeDef TestTim5;
  125. extern GPIO_TypeDef TestGpioE;
  126. extern GPIO_TypeDef TestGpioF;
  127. extern GPIO_TypeDef TestGpioI;
  128. extern USART_TypeDef TestUsart1;
  129. extern OS_EVENT TestFrameSem;
  130. extern IRQn_Type TestNvicIrq;
  131. extern uint32_t TestNvicPreemptPriority;
  132. extern uint32_t TestNvicSubPriority;
  133. extern uint32_t TestHalTickCallCount;
  134. extern uint32_t TestOsCpuSysTickCallCount;
  135. extern HAL_StatusTypeDef TestReceiveResults[4U];
  136. extern uint32_t TestReceiveResultCount;
  137. extern uint32_t TestReceiveCallCount;
  138. extern uint32_t TestReceiveErrorInjectionCall;
  139. extern uint32_t TestAbortReceiveCallCount;
  140. extern uint32_t TestUartFlagClearCallCount;
  141. extern uint8_t TestRecoveryCallOrder[4U];
  142. extern uint32_t TestRecoveryCallOrderLength;
  143. extern uint32_t TestSemPostCallCount;
  144. extern uint8_t OSRunning;
  145. #define TIM5 (&TestTim5)
  146. #define GPIOE (&TestGpioE)
  147. #define GPIOF (&TestGpioF)
  148. #define GPIOI (&TestGpioI)
  149. #define USART1 (&TestUsart1)
  150. #define SysTick_IRQn ((IRQn_Type)-1)
  151. #define TIM5_IRQn ((IRQn_Type)50)
  152. #define USART1_IRQn ((IRQn_Type)37)
  153. #define OS_TRUE (1U)
  154. #define OS_ERR_NONE (0U)
  155. #define OS_PRIO_SELF (0U)
  156. #define OS_TASK_OPT_STK_CHK (0U)
  157. #define OS_TASK_OPT_STK_CLR (0U)
  158. #define TIM_CR1_CEN (0x0001U)
  159. #define TIM_SR_UIF (0x0001U)
  160. #define TIM_EGR_UG (0x0001U)
  161. #define TIM_DIER_UIE (0x0001U)
  162. #define GPIO_MODE_OUTPUT_PP (0U)
  163. #define GPIO_PULLUP (0U)
  164. #define GPIO_SPEED_FREQ_LOW (0U)
  165. #define GPIO_PIN_4 (0x0010U)
  166. #define GPIO_PIN_5 (0x0020U)
  167. #define GPIO_PIN_6 (0x0040U)
  168. #define GPIO_PIN_7 (0x0080U)
  169. #define GPIO_PIN_8 (0x0100U)
  170. #define GPIO_PIN_9 (0x0200U)
  171. #define PLC_Q0_PORT (GPIOF)
  172. #define PLC_Q0_PIN (GPIO_PIN_6)
  173. #define PLC_Q1_PORT (GPIOF)
  174. #define PLC_Q1_PIN (GPIO_PIN_8)
  175. #define PLC_Q2_PORT (GPIOF)
  176. #define PLC_Q2_PIN (GPIO_PIN_7)
  177. #define PLC_Q3_PORT (GPIOF)
  178. #define PLC_Q3_PIN (GPIO_PIN_9)
  179. #define PLC_Q4_PORT (GPIOI)
  180. #define PLC_Q4_PIN (GPIO_PIN_8)
  181. #define PLC_Q5_PORT (GPIOE)
  182. #define PLC_Q5_PIN (GPIO_PIN_6)
  183. #define PLC_Q6_PORT (GPIOE)
  184. #define PLC_Q6_PIN (GPIO_PIN_5)
  185. #define PLC_Q7_PORT (GPIOE)
  186. #define PLC_Q7_PIN (GPIO_PIN_4)
  187. #define PLC_LINK_LED_PORT (PLC_Q0_PORT)
  188. #define PLC_LINK_LED_PIN (PLC_Q0_PIN)
  189. #define RCC_OSCILLATORTYPE_HSE (0U)
  190. #define RCC_HSE_ON (0U)
  191. #define RCC_PLL_ON (0U)
  192. #define RCC_PLLSOURCE_HSE (0U)
  193. #define RCC_PLLP_DIV2 (0U)
  194. #define RCC_CLOCKTYPE_HCLK (0U)
  195. #define RCC_CLOCKTYPE_SYSCLK (0U)
  196. #define RCC_CLOCKTYPE_PCLK1 (0U)
  197. #define RCC_CLOCKTYPE_PCLK2 (0U)
  198. #define RCC_SYSCLKSOURCE_PLLCLK (0U)
  199. #define RCC_SYSCLK_DIV1 (0U)
  200. #define RCC_HCLK_DIV4 (0U)
  201. #define RCC_HCLK_DIV2 (0U)
  202. #define FLASH_LATENCY_5 (0U)
  203. #define PWR_REGULATOR_VOLTAGE_SCALE1 (0U)
  204. #define UART_WORDLENGTH_8B (0U)
  205. #define UART_STOPBITS_1 (0U)
  206. #define UART_PARITY_NONE (0U)
  207. #define UART_MODE_TX_RX (0U)
  208. #define UART_HWCONTROL_NONE (0U)
  209. #define UART_OVERSAMPLING_16 (0U)
  210. #define HAL_UART_ERROR_NONE (0U)
  211. #define HAL_UART_ERROR_ORE (0x00000008U)
  212. #define HAL_UART_STATE_READY (0U)
  213. #define HAL_UART_STATE_BUSY_RX (0x22U)
  214. #define __HAL_UART_CLEAR_PEFLAG(handle) \
  215. do { (void)(handle); TestUartFlagClearCallCount++; } while (0)
  216. #define __HAL_UART_CLEAR_FEFLAG(handle) \
  217. __HAL_UART_CLEAR_PEFLAG(handle)
  218. #define __HAL_UART_CLEAR_NEFLAG(handle) \
  219. __HAL_UART_CLEAR_PEFLAG(handle)
  220. #define __HAL_UART_CLEAR_OREFLAG(handle) \
  221. __HAL_UART_CLEAR_PEFLAG(handle)
  222. #define __HAL_UART_CLEAR_IDLEFLAG(handle) \
  223. __HAL_UART_CLEAR_PEFLAG(handle)
  224. #define __HAL_RCC_PWR_CLK_ENABLE() do { } while (0)
  225. #define __HAL_PWR_VOLTAGESCALING_CONFIG(v) do { (void)(v); } while (0)
  226. #define __HAL_RCC_GPIOE_CLK_ENABLE() do { } while (0)
  227. #define __HAL_RCC_GPIOF_CLK_ENABLE() do { } while (0)
  228. #define __HAL_RCC_GPIOI_CLK_ENABLE() do { } while (0)
  229. #define __HAL_RCC_TIM5_CLK_ENABLE() do { } while (0)
  230. #define OS_ENTER_CRITICAL() do { (void)cpu_sr; } while (0)
  231. #define OS_EXIT_CRITICAL() do { } while (0)
  232. #define __disable_irq() do { } while (0)
  233. void HAL_Init(void);
  234. HAL_StatusTypeDef HAL_RCC_OscConfig(const RCC_OscInitTypeDef *config);
  235. HAL_StatusTypeDef HAL_RCC_ClockConfig(const RCC_ClkInitTypeDef *config,
  236. uint32_t latency);
  237. void HAL_GPIO_Init(GPIO_TypeDef *port, const GPIO_InitTypeDef *config);
  238. void HAL_GPIO_WritePin(GPIO_TypeDef *port, uint16_t pin,
  239. GPIO_PinState state);
  240. HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *uartHandle);
  241. HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *uartHandle,
  242. uint8_t *data, uint16_t size);
  243. HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *uartHandle);
  244. HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *uartHandle,
  245. uint8_t *data, uint16_t size);
  246. HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *uartHandle);
  247. void HAL_UART_IRQHandler(UART_HandleTypeDef *uartHandle);
  248. void HAL_NVIC_SetPriority(IRQn_Type irqn, uint32_t preemptPriority,
  249. uint32_t subPriority);
  250. void HAL_NVIC_EnableIRQ(IRQn_Type irqn);
  251. void HAL_IncTick(void);
  252. void Error_Handler(void);
  253. void OSInit(void);
  254. void OSStart(void);
  255. INT8U OSTaskCreateExt(void (*task)(void *), void *argument, OS_STK *stackTop,
  256. INT8U priority, INT16U taskId, OS_STK *stackBottom,
  257. INT32U stackSize, void *extension, INT16U options);
  258. OS_EVENT *OSSemCreate(INT16U count);
  259. void OSSemPend(OS_EVENT *event, uint32_t timeout, INT8U *error);
  260. INT8U OSSemPost(OS_EVENT *event);
  261. void OSTaskSuspend(INT8U priority);
  262. void OSTimeDly(uint32_t ticks);
  263. uint32_t OSTimeGet(void);
  264. void OSIntEnter(void);
  265. void OSIntExit(void);
  266. void OSTimeTick(void);
  267. void OS_CPU_SysTickHandler(void);
  268. MODBUS_STATUS ModbusBackupRestore(MODBUS_SLAVE *slave);
  269. MODBUS_STATUS ModbusBackupSave(const MODBUS_SLAVE *slave);
  270. #endif