Skip to content

Commit 680120a

Browse files
committed
Fix DMA buffer release in ADC/DAC.
* Release buffers before deallocing pool.
1 parent 84b5096 commit 680120a

File tree

2 files changed

+15
-14
lines changed

2 files changed

+15
-14
lines changed

src/AdvancedADC.cpp

+7-7
Original file line numberDiff line numberDiff line change
@@ -60,19 +60,19 @@ static void dac_descr_deinit(adc_descr_t *descr, bool dealloc_pool) {
6060
HAL_TIM_Base_Stop(&descr->tim);
6161
HAL_ADC_Stop_DMA(&descr->adc);
6262

63-
if (dealloc_pool) {
64-
if (descr->pool) {
65-
delete descr->pool;
66-
}
67-
descr->pool = nullptr;
68-
}
69-
7063
for (size_t i=0; i<AN_ARRAY_SIZE(descr->dmabuf); i++) {
7164
if (descr->dmabuf[i]) {
7265
descr->dmabuf[i]->release();
7366
descr->dmabuf[i] = nullptr;
7467
}
7568
}
69+
70+
if (dealloc_pool) {
71+
if (descr->pool) {
72+
delete descr->pool;
73+
}
74+
descr->pool = nullptr;
75+
}
7676
}
7777
}
7878

src/AdvancedDAC.cpp

+8-7
Original file line numberDiff line numberDiff line change
@@ -58,19 +58,20 @@ static void dac_descr_deinit(dac_descr_t *descr, bool dealloc_pool) {
5858
HAL_TIM_Base_Stop(&descr->tim);
5959
HAL_DAC_Stop_DMA(descr->dac, descr->channel);
6060

61+
for (size_t i=0; i<AN_ARRAY_SIZE(descr->dmabuf); i++) {
62+
if (descr->dmabuf[i]) {
63+
descr->dmabuf[i]->release();
64+
descr->dmabuf[i] = nullptr;
65+
}
66+
}
67+
6168
if (dealloc_pool) {
6269
if (descr->pool) {
6370
delete descr->pool;
6471
}
6572
descr->pool = nullptr;
6673
}
6774

68-
for (size_t i=0; i<AN_ARRAY_SIZE(descr->dmabuf); i++) {
69-
if (descr->dmabuf[i]) {
70-
descr->dmabuf[i]->release();
71-
descr->dmabuf[i] = nullptr;
72-
}
73-
}
7475
}
7576
}
7677

@@ -158,7 +159,7 @@ int AdvancedDAC::begin(uint32_t resolution, uint32_t frequency, size_t n_samples
158159

159160
int AdvancedDAC::stop()
160161
{
161-
dac_descr_deinit(descr, false);
162+
dac_descr_deinit(descr, true);
162163
return 1;
163164
}
164165

0 commit comments

Comments
 (0)