Easyelectronics.ru

Электроника для всех
Текущее время: 05 июн 2020, 13:26

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 40 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: KEIL V5 vs V6 H7
СообщениеДобавлено: 22 мар 2020, 21:13 
Заглядывает иногда

Зарегистрирован: 02 янв 2016, 06:47
Сообщения: 132
Здравствуйте

Есть проект на stm32H7 все работает - проблем нет -)
Среда разработки KEIL 5.29
Используется компилятор V5 default
решил перейти на компилятор V6

проект уходит в hard fault.
проблема уходит если выключить I и D кеши...
причем скатер настроен верно, MPU тоже...
на 5 версии компилятора все работает

решил собрать "голый" проект с подключением USB HID. с 5версией все работает без проблем
с 6 версией только при отключении кеша...
решил сделать еще проверку на экране... та же самая ситуация V5 работает, V6 -нет
Вырубание кеша для V6 все начинает работать...
ситуация похожа на то, когда не настроен MPU и когда используется не тот домен ОЗУ при дма...
но загвоздка в том, что для V5 все работает, а для V6 нет

кто-то сталкивался?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 22 мар 2020, 21:22 
Старожил
Аватара пользователя

Зарегистрирован: 20 май 2013, 22:29
Сообщения: 366
Смотри регистры после hardfault
https://interrupt.memfault.com/blog/cor ... -the-fault


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 22 мар 2020, 22:01 
Заглядывает иногда

Зарегистрирован: 02 янв 2016, 06:47
Сообщения: 132
ArtDen писал(а):
Смотри регистры после hardfault
https://interrupt.memfault.com/blog/cor ... -the-fault


показывает FORCED - ошибка конфигурации
поведение очень похоже на то, когда используется DMA, но память не настроена..
поведение 1в1... выключение кеша это и подтверждает...
не понятно, что 6 версии компилера не нравится...
с 5 версией все работает идеально....
в скатере регионы прописаны, MPU так же настроено...
для теста я решил использовать юсб, и экран с дма по spi
все буферы в sram3 защищены MPU
ЮСБ по идее дма не использует явно, почему он не запускается?
разница только в версии компилятора


Вложения:
forced.png
forced.png [ 27.15 Кб | Просмотров: 706 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 22 мар 2020, 23:03 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1477
Оптимизация какая стоит?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 22 мар 2020, 23:13 
Заглядывает иногда

Зарегистрирован: 02 янв 2016, 06:47
Сообщения: 132
VladislavS писал(а):
Оптимизация какая стоит?


Для v5
-O3 + optimize for time

Для V6
-O3 + optimize for time
и пробовал
-Ofast + optimize for time

вообщем проверил - проблема сугубо с ДМА
для V5 все работает, для V6 нет
Ощущение, что V6 или не видит адресацию в скатере, или может с выравниванием проблема у него (судя по регистрам fault выше таем есть проблема с ALIGNED)
я проверил выравнивание - оно соответствует для 6 версии компилера


вот вырезки с настроек
Скатер

Код:
  DMASRAM3BUF 0x30040000 0x00000800  {  ; RW data D2 240MHz  SRAM3
   *(.dmaSRAM3BuffArea)
  }


объявление переменных
Код:
ALIGN_32BYTES (uint8_t lcdDATA[1024]) __attribute__((section(".dmaSRAM3BuffArea"))); 
ALIGN_32BYTES (uint8_t lcdCMD[32]) __attribute__((section(".dmaSRAM3BuffArea"))); 

MPU

Код:
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
  MPU_InitStruct.Number = MPU_REGION_NUMBER0;
  MPU_InitStruct.BaseAddress = 0x30040000;
  MPU_InitStruct.Size = MPU_REGION_SIZE_2KB;
  MPU_InitStruct.SubRegionDisable = 0x0;
  MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
  MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
  MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
  MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
  MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 22 мар 2020, 23:16 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1477
У меня просто ни в каком виде с -О0 не работает почему-то. Но это не ваш случай.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 22 мар 2020, 23:41 
Заглядывает иногда

Зарегистрирован: 02 янв 2016, 06:47
Сообщения: 132
VladislavS писал(а):
У меня просто ни в каком виде с -О0 не работает почему-то. Но это не ваш случай.

Матерится на LOT?

включите optimize for time


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 02:18 
Заглядывает иногда

Зарегистрирован: 02 янв 2016, 06:47
Сообщения: 132
А у меня вот с оптимизацией -О0 заработал V6, с кешем, со всем, как полагается...
но вот все оптимизации выше уже вызывают faults
UNALIGNED в SCB->CFSR как на скрине выше...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 02:51 
Заглядывает иногда

Зарегистрирован: 02 янв 2016, 06:47
Сообщения: 132
Проблему решил, спасибо, что откликнулись!

суть проблемы
у меня была опредлена структура типом
Код:
typedef struct {

   GPIO_TypeDef*         ResetPort;
   GPIO_TypeDef*         DCPort;
   GPIO_TypeDef*         CSPort;
   SPI_HandleTypeDef*    SPI;

   uint8_t*    BufData;
   uint8_t*    BufCmd;
   
   uint16_t                   ResetPin;
   uint16_t                   DCPin;
   uint16_t                   CSPin;   
   
   uint16_t                   CurrentX;
   uint16_t                   CurrentY;
   
   uint16_t                   Width;
   uint16_t                   Height;
   
   uint8_t                   UseCS;
   uint8_t                   ColumnOffset;

} TLCD_Config;


это структура для хранения конфигурации дисплея...
в ней есть два указателя на массивы для хранения содержимого экрана и для комманд
оба эти массива, для Н7, при работе через ДМА, должны быть размещены в втором домене и защищены MPU
что и было сделано... и все работало с компилером V5

uint8_t* BufData;
uint8_t* BufCmd;

но при включении оптимизации в компилере V6, оказалось этого не досаточно -(
эти указатели должны быть определены как

volatile uint8_t* BufData;
volatile uint8_t* BufCmd;

или сама переменная указывающая на этот тип должна быть volatile

volatile TLCD_Config LCD_Config __attribute__((section(".SRAM3")));

с одной стороны классические грабли, с другой не совсем явные

при чем не важно как определены переменные буферов volatile или нет


P.S. 6 компилер работает (компилится) гораздо быстрее пятого, что очень радует...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 07:53 
Старожил
Аватара пользователя

Зарегистрирован: 12 июн 2018, 15:04
Сообщения: 655
Вот так и рождаются кривые слухи о том, что максимальная оптимизация - зло.

Правильно написанный проект будет работать с любой оптимизацией.

Эмбед сообщество деградирует. Через несколько лет забудут, что такое volatile и с чем его едят. Хедеры копируются и не проверяются на корректность.
В своё время перелопачивал файлы хедеров с регистрами - добавлял везде volatile. Без него повисала установка частоты через PLL.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 15:36 
Заглядывает иногда

Зарегистрирован: 02 янв 2016, 06:47
Сообщения: 132
RepStosw
Не могу согласиться с Вами...
Как раз в сообществе прослеживается пихание volatile куда надо и не надо, не понимая сути...
Мол не работает, volatile пробовал ... частый сценарий многих топиков.

И тут ситуация была не в оптимизации, как таковой, а в версии компилятора.
Пятая версия компилятора с максимальной оптимизацией работала идеально, шестая версия - требовала коррекции...
Вообще, в данной ситуации потребовался ревью работы с железом, так как в Н7 свои особенности работы с памятью при работе с ДМА.
Отсюда и возникшие грабли... Так что, ИМНО, зря бурчите... вполне полезная ситуация для форумчан (ну кроме тех у кого чувство собственной значимости, превосходства и cамоуверенности в здоровых пределах -) )

И перечитайте, топик, никто не писал, что оптимизация зло, наоборот, за нее боролись, переключая ее режимы для поиска понимания проблемы...

С уважением....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 15:48 
Старожил
Аватара пользователя

Зарегистрирован: 20 май 2013, 22:29
Сообщения: 366
vasiliuz, а можно поподробнее как именно в твоём случае повлиял volatile и почему его отсутствие вызывало ошибку?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 15:50 
Старожил
Аватара пользователя

Зарегистрирован: 12 июн 2018, 15:04
Сообщения: 655
vasiliuz писал(а):
Не могу согласиться с Вами...
Как раз в сообществе прослеживается пихание volatile куда надо и не надо, не понимая сути...
Мол не работает, volatile пробовал ... частый сценарий многих топиков.


Даунов хватает по обе стороны баррикад.

vasiliuz писал(а):
И перечитайте, топик, ...


Есть дела по-интереснее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 16:02 
Заглядывает иногда

Зарегистрирован: 02 янв 2016, 06:47
Сообщения: 132
RepStosw писал(а):
Есть дела по-интереснее.


Зачем вообще влезали сюда? Пукнуть? Стало легче? Рад что помог Вам, с облегчением...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 16:15 
Старожил
Аватара пользователя

Зарегистрирован: 12 июн 2018, 15:04
Сообщения: 655
vasiliuz писал(а):
Зачем вообще влезали сюда? Пукнуть? Стало легче? Рад что помог Вам, с облегчением...


Вот у вас больше всех тут бомбит, раз на свой счёт принимаете и обижаетесь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 16:53 
Заглядывает иногда

Зарегистрирован: 02 янв 2016, 06:47
Сообщения: 132
ArtDen писал(а):
vasiliuz, а можно поподробнее как именно в твоём случае повлиял volatile и почему его отсутствие вызывало ошибку?


На самом деле, это очень хороший и правильный вопрос....
На решение применить volatile повлияло fault UNALIGNED в SCB->CFSR
Так как память четко выделена, выровнена и упорядочена, то понятно, что с ее определением проблем нет.
указатель явно указывал на эту память, но запись в нее не происходила - не происходило заполнение буфера
указание в объявлении буфера volatile тоже картину не меняло...
выравнивание структуры в памяти тоже результата не принесло
Я предположил, что компилятор упраздняет указатель на буфер... поэтому указал его "не трогать" при помощи volatile
Это сработало... чтобы не менять структуру, я указал всю переменную структуры как volatile, так как там еще есть переменные которые будут меняться во время работы.

Мое мнение, это особенности оптимизации компилятора шестой версии. Так как в пятом это вполне рабочая конфигурация...

RepStosw меня не бомбит, просто в каждую тему должен кто-то зайти, что-то буркнуть не по теме, и с пафосом самого умного гордо уйти... Еще должен появится какой-то персонаж и выяснить используется HAL или нет, если используется - вынести вердикт - что все ясно - все говно... и т.д.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 17:02 
Старожил
Аватара пользователя

Зарегистрирован: 20 май 2013, 22:29
Сообщения: 366
vasiliuz писал(а):
Так как память четко выделена, выровнена и упорядочена, то понятно, что с ее определением проблем нет.
указатель явно указывал на эту память, но запись в нее не происходила - не происходило заполнение буфера

Это как?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 17:05 
Старожил
Аватара пользователя

Зарегистрирован: 12 июн 2018, 15:04
Сообщения: 655
vasiliuz писал(а):
RepStosw меня не бомбит, просто в каждую тему должен кто-то зайти, что-то буркнуть не по теме, и с пафосом самого умного гордо уйти... Еще должен появится какой-то персонаж и выяснить используется HAL или нет, если используется - вынести вердикт - что все ясно - все говно... и т.д.


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 17:16 
Заглядывает иногда

Зарегистрирован: 02 янв 2016, 06:47
Сообщения: 132
ArtDen писал(а):
vasiliuz писал(а):
Так как память четко выделена, выровнена и упорядочена, то понятно, что с ее определением проблем нет.
указатель явно указывал на эту память, но запись в нее не происходила - не происходило заполнение буфера

Это как?


вот пруф
это структура - она заполнена одинаково в обоих случаях, с volatile или без
но если она не volatile то запись не производится, получается фаулт на попытке записи туда....


Вложения:
mem2.png
mem2.png [ 26.21 Кб | Просмотров: 495 ]
mem1.png
mem1.png [ 23.12 Кб | Просмотров: 495 ]
o3.png
o3.png [ 63.4 Кб | Просмотров: 495 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 17:34 
Заглядывает иногда

Зарегистрирован: 02 янв 2016, 06:47
Сообщения: 132
еще момент есть
есть например другая перифирия , которая работает по DMA определена так же в том же регионе памяти
и вот с этими данными проблем нет - указывается напрямую указатель на эти буферы в ините ДМА и все работает ок

соответственно есть другие модули, которые имеют такую же организацию конфигов через структуры - и там тоже все работает без проблем

получается, что проблема только в том месте, где есть указатель на буфер, который используется в DMA...
в Н7 к памяти, которая используется в DMA свои требования...
я думаю, что "проблема" крылась где-то здесь....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 17:45 
Старожил
Аватара пользователя

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 1477
Разные компиляторы, а v5 и v6 это разные компиляторы, по разному подходят к процессу оптимизации. v6 запросто может быть намного "агрессивней".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 18:20 
Старожил
Аватара пользователя

Зарегистрирован: 20 май 2013, 22:29
Сообщения: 366
Т.е. вылетает на LCD_Config.BufData[i] = StartLogo[i] ? Это точно установлено?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 18:25 
Заглядывает иногда

Зарегистрирован: 02 янв 2016, 06:47
Сообщения: 132
ArtDen писал(а):
Т.е. вылетает на LCD_Config.BufData[i] = StartLogo[i] ? Это точно установлено?


если в структуре поменять

uint8_t* BufData;
uint8_t* BufCmd;
на

volatile uint8_t* BufData;
volatile uint8_t* BufCmd;

то все начинает работать...
эти буферы просто работают одинаково и в паре - поэтому проверять по отдельности нет смысла


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 18:30 
Старожил
Аватара пользователя

Зарегистрирован: 20 май 2013, 22:29
Сообщения: 366
Глядя на код, могу сказать, что ошибка скорее всего где-то в другом месте. То, что помогло volatile - скорее всего случайность. Возможно, что оно там и нужно (чтобы это точно сказать, надо видеть весь код, где это поле используется), но мне кажется, что косяки есть ещё в других местах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: KEIL V5 vs V6 H7
СообщениеДобавлено: 23 мар 2020, 18:34 
Заглядывает иногда

Зарегистрирован: 02 янв 2016, 06:47
Сообщения: 132
так по сути я весь код проблемного места показал...
там нечего больше показать, если что-то конкретно интересует - скажите я выложу


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 40 ]  На страницу 1, 2  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], mab7272


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB