Skip to content

Commit 7c3b9fa

Browse files
Zhou XiaoChrysalisChenJ
authored andcommitted
change(ble): bugs fixed on spi ble log
* removed spi master in iram select for flash only firmware * fixed memory issue in transaction init function * fixed memory issue in transaction deinit function
1 parent a5c32a5 commit 7c3b9fa

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

components/bt/common/Kconfig.in

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ config BT_ALARM_MAX_NUM
99
config BT_BLE_LOG_SPI_OUT_ENABLED
1010
bool "Output ble logs to SPI bus (Experimental)"
1111
default n
12-
select SPI_MASTER_IN_IRAM
1312
help
1413
Output ble logs to SPI bus
1514

components/bt/common/ble_log/ble_log_spi_out.c

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -140,14 +140,16 @@ static int spi_out_init_trans(spi_out_trans_cb_t **trans_cb, uint16_t buf_size)
140140
if (!(*trans_cb)) {
141141
return -1;
142142
}
143+
memset(*trans_cb, 0, sizeof(spi_out_trans_cb_t));
144+
143145
uint8_t *buf = (uint8_t *)spi_bus_dma_memory_alloc(SPI_OUT_BUS, (size_t)buf_size, 0);
144146
if (!buf) {
145147
free(*trans_cb);
148+
*trans_cb = NULL;
146149
return -1;
147150
}
148151

149152
// Initialization
150-
memset(*trans_cb, 0, sizeof(spi_out_trans_cb_t));
151153
(*trans_cb)->buf_size = buf_size;
152154
(*trans_cb)->trans.tx_buffer = buf;
153155
return 0;
@@ -158,8 +160,13 @@ static void spi_out_deinit_trans(spi_out_trans_cb_t **trans_cb)
158160
if (!(*trans_cb)) {
159161
return;
160162
}
163+
if ((*trans_cb)->trans.tx_buffer) {
164+
// Do not free buffer until recycled
165+
while ((*trans_cb)->flag == SPI_OUT_TRANS_CB_FLAG_IN_QUEUE) {}
166+
free((uint8_t *)(*trans_cb)->trans.tx_buffer);
167+
(*trans_cb)->trans.tx_buffer = NULL;
168+
}
161169

162-
free((uint8_t *)(*trans_cb)->trans.tx_buffer);
163170
free(*trans_cb);
164171
*trans_cb = NULL;
165172
return;
@@ -174,7 +181,7 @@ IRAM_ATTR static void spi_out_tx_done_cb(spi_transaction_t *ret_trans)
174181

175182
IRAM_ATTR static inline int spi_out_append_trans(spi_out_trans_cb_t *trans_cb)
176183
{
177-
if (trans_cb->flag != SPI_OUT_TRANS_CB_FLAG_NEED_QUEUE) {
184+
if (trans_cb->flag != SPI_OUT_TRANS_CB_FLAG_NEED_QUEUE || !trans_cb->length) {
178185
return -1;
179186
}
180187

@@ -185,6 +192,8 @@ IRAM_ATTR static inline int spi_out_append_trans(spi_out_trans_cb_t *trans_cb)
185192
trans_cb->flag = SPI_OUT_TRANS_CB_FLAG_IN_QUEUE;
186193
return 0;
187194
} else {
195+
trans_cb->length = 0;
196+
trans_cb->flag = SPI_OUT_TRANS_CB_FLAG_AVAILABLE;
188197
return -1;
189198
}
190199
}
@@ -224,6 +233,7 @@ static void spi_out_log_cb_deinit(spi_out_log_cb_t **log_cb)
224233
}
225234
}
226235
free(*log_cb);
236+
*log_cb = NULL;
227237
return;
228238
}
229239

@@ -578,7 +588,7 @@ static void spi_out_ts_sync_deinit(void)
578588
}
579589

580590
// CRITICAL: This function is called in ESP Timer task
581-
IRAM_ATTR static void esp_timer_cb_ts_sync(void)
591+
static void esp_timer_cb_ts_sync(void)
582592
{
583593
// Initialize variables
584594
uint32_t lc_ts = 0;
@@ -627,7 +637,9 @@ int ble_log_spi_out_init(void)
627637
.quadwp_io_num = -1,
628638
.quadhd_io_num = -1,
629639
.max_transfer_sz = SPI_OUT_MAX_TRANSFER_SIZE,
640+
#if CONFIG_SPI_MASTER_ISR_IN_IRAM
630641
.intr_flags = ESP_INTR_FLAG_IRAM
642+
#endif // CONFIG_SPI_MASTER_ISR_IN_IRAM
631643
};
632644
spi_device_interface_config_t dev_config = {
633645
.clock_speed_hz = SPI_MASTER_FREQ_20M,
@@ -782,7 +794,7 @@ IRAM_ATTR void ble_log_spi_out_ll_log_ev_proc(void)
782794
}
783795
#endif // CONFIG_BT_BLE_LOG_SPI_OUT_LL_ENABLED
784796

785-
IRAM_ATTR int ble_log_spi_out_write(uint8_t source, const uint8_t *addr, uint16_t len)
797+
int ble_log_spi_out_write(uint8_t source, const uint8_t *addr, uint16_t len)
786798
{
787799
if (!ul_log_inited) {
788800
return -1;
@@ -798,7 +810,7 @@ IRAM_ATTR int ble_log_spi_out_write(uint8_t source, const uint8_t *addr, uint16_
798810
return ret;
799811
}
800812

801-
IRAM_ATTR int ble_log_spi_out_printf(uint8_t source, const char *format, ...)
813+
int ble_log_spi_out_printf(uint8_t source, const char *format, ...)
802814
{
803815
if (!ul_log_inited) {
804816
return -1;
@@ -845,7 +857,7 @@ IRAM_ATTR int ble_log_spi_out_printf(uint8_t source, const char *format, ...)
845857
return ret;
846858
}
847859

848-
IRAM_ATTR int ble_log_spi_out_printf_enh(uint8_t source, uint8_t level, const char *tag, const char *format, ...)
860+
int ble_log_spi_out_printf_enh(uint8_t source, uint8_t level, const char *tag, const char *format, ...)
849861
{
850862
if (!ul_log_inited) {
851863
return -1;
@@ -897,7 +909,7 @@ IRAM_ATTR int ble_log_spi_out_printf_enh(uint8_t source, uint8_t level, const ch
897909
return ret;
898910
}
899911

900-
IRAM_ATTR int ble_log_spi_out_write_with_ts(uint8_t source, const uint8_t *addr, uint16_t len)
912+
int ble_log_spi_out_write_with_ts(uint8_t source, const uint8_t *addr, uint16_t len)
901913
{
902914
if (!ul_log_inited) {
903915
return -1;

0 commit comments

Comments
 (0)