资源互斥与重入函数
资源包括SPI接口、内部共享结构体、共享变量。
资源实在函数内部操作的,包括需要互斥的资源,因此函数和资源互斥一起考虑。
第一、SPI接口互斥检查
- 初始化—顺序执行一次,不用考虑。
- SX126X线程中断,TxDone,RxDone
- Jit线程—sendframe
- Up线程—receive和getcurrenttime
同一个线程内按顺序执行,因此不会被多个线程调用的函数不用关心。
共同执行的三个函数,要求可重入+锁住需要互斥的资源,
esp_err_t esp_spi2_wb(spi_device_handle_t lora_spi, uint8_t address, uint8_t *data, uint16_t size )
esp_err_t esp_spi2_rb(spi_device_handle_t lora_spi, uint8_t address, uint8_t *data, uint16_t size)
esp_err_t esp_spi2_rb2(spi_device_handle_t lora_spi, uint8_t address, uint8_t *datawr, uint8_t *datard, uint16_t size)
--检查Ok
第二、时间计数器互斥检查
只有FreeRTOS tick会更新,其它都是读取,是线程安全的。
SX1302内部会更新。
只在Up线程计算这两个计时器的差值。是线程安全的。
第三、统计计数器
--计数器初始化,
--计数器增加,
--计数器清零