Jump to content
    

freeRTOs 8.1.2 не стабильно работает приложение

Приложение крутится на STM32F405 и взаимодействует с vlsi1053b. Захватывает звук по SPI от Vlsi и сохраняет на SD карту (по SDIO). Еще один поток отрабатывает кнопки, итого - 2 потока.

В начале все было хорошо, но как только добавил функцию оцифровки со встроенного ацп (с пустым прерыванием от ДМА по завершению цикла с частотой 22кгц) - появились сбои записи fatfs в основном потоке, например, вызываю запись 100 байтов, а функция сообщает, что записала 55. И после этого уже не пишет ничего.

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

В итоге, убрал взаимодействие с Vlsi, убрал все возможные DMA и прерывания (кроме прерываний от rtos) и результат такой, что сбои случаются если просто запустить и сразу обратиться к карте, хотя если делать все по шагам - все прокатывает отлично. Опять таки - выкручиваю оптимизацию на скорость - и все начинает работать как бы стабильно. Настораживает, что приложение никогда не зависает, просто я фиксирую ошибки по тому или иному блоку (по SD карте или ошибки коммуникации с VlSI) , связанные, как мне видится с длительными блокированиями задач, хотя тот же fatfs работает синхронно по полингу и откуда взяться такому лагу - пока ума не приложу, в vlsi через, например минуту стабильной работы ни с того ни с сего внезапно переполняется буфер с аудиоданнми, вчера день потерял в поиске, что может быть?????

 

Проект генерировал в STM32CubeMX 4.7, так же стараюсь использовать его обертки для rtos, вроде в них нет подвоха.

настройки прерываний и их приоритеты корректны и за этим следит Cube, тут перепроверял. Глобалный стек - 0x4000, у основной задачи - столько же

Edited by kan35

Share this post


Link to post
Share on other sites

Собственно здесь прикрепил проект для отладки STM3210E-EVAL от STM (STM32cube и IAR/KEIL). Косяк не зависит от проца,компилятра.

https://yadi.sk/d/0fjiGdpJfvD3a

Ниже я привожу код, который я сам писал, все остальное делает конфигуратор.

В конфигураторе настроил обработку 4 каналов Ацп и прерывание от дма после каждого цикла. Как видите - прерывание пустое. Как только включаю оцифровку - FAT даже не монтируется, о чем мигает светодиод :-) ! если у кого есть возможность посмотрите на код, а еще лучше - попробуйте.

/* USER CODE BEGIN 4 */
void LED(int state)
{
 if (state)
   HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_SET);
 else
   HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_RESET);
}

void Fault(int n)
{
 while (1)
 {
   for (int i = 0; i<n; i++)
   {
     LED(1);
     osDelay(50);
     LED(0);
     osDelay(150);
   }
   osDelay(1000);
 }
}

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
{
 /* NOTE : This function should not be modified. When the callback is needed,
           function HAL_ADC_ConvCpltCallback must be implemented in the user file.
  */
}
/* USER CODE END 4 */

/* StartDefaultTask function */
void StartDefaultTask(void const * argument)
{
 /* init code for FATFS */
 MX_FATFS_Init();

 /* USER CODE BEGIN 5 */

 if (HAL_ADC_Start_DMA(&hadc1,\
                       (uint32_t *)aADCxConvertedValues,\
                       ADCCONVERTEDVALUES_BUFFER_SIZE\
                      ) != HAL_OK)\
   Fault(4);   /* Start Error */

 if (f_mount(&fs, SD_Path, 1) != FR_OK )
   Fault(1);
 /* Infinite loop */
 for(;;)
 {
   FIL fp;
   unsigned int ar;
   char buff[10];
   osDelay(1);
   if (f_open(&fp, "test.txt", FA_READ) != FR_OK)
     Fault(2);
   if (f_read(&fp, buff, 10, &ar) != FR_OK || ar != 10)
     Fault(3);
   if (f_close(&fp) != FR_OK)
     Fault(4);

 }
 /* USER CODE END 5 */ 
}

Share this post


Link to post
Share on other sites

Выяснил, действительно, переполняется буфер SDIO, кривой драйвер, спасибо, ST. Перешел на драйвер с обменом по ДМА. Загрузка проца, прерывания, оптимизации кода - перестали влиять. Надо же!

FreeRTOS был не при чем.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...