Skip to content

[HAL/ADC] Чтение буффера АЦП и проверка на кэширование в DMA #11

@KaiL4eK

Description

@KaiL4eK

Утро началось не с кофе. =) Вместе с @PonomarevDA выяснили, что на камнях F7 может встречаться проблема кэширования буфера при работе с АЦП. Быстрофикс говорит о том, что можно использовать следующий вид при работе:

#if defined(__GNUC__)
__attribute__((aligned (32)))
#endif
static adcsample_t adc_buffer[ADC1_NUM_CHANNELS * ADC1_BUF_DEPTH];

static void adccallback(ADCDriver *adcp, adcsample_t *buffer, size_t n)
{
  adcp = adcp; n = n;
  dmaBufferInvalidate(buffer,
                      n * adcp->grpp->num_channels * sizeof (adcsample_t));
...
}

Как видно, используется функция dmaBufferInvalidate() для проверки того, выданы данные из кэша или нет, а также выравнивается буфер adc_buffer[] 32м байтам.

Причины этой проблемы выясняются, быстрофиксом пользоваться можно, но нужно четко понимать, при каких обстоятельствах данные начинают зависать в кэше.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions