-
Notifications
You must be signed in to change notification settings - Fork 7
Open
Labels
Description
Утро началось не с кофе. =) Вместе с @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м байтам.
Причины этой проблемы выясняются, быстрофиксом пользоваться можно, но нужно четко понимать, при каких обстоятельствах данные начинают зависать в кэше.
Reactions are currently unavailable