k000858 0 22 марта, 2013 Опубликовано 22 марта, 2013 · Жалоба описываю траблу: Обновил в проекте библиотеки CMSIS до 1.1.0, в которых включен Prefetch Buffer, после чего откомпилированная прога стала странно себя вести: загружаться через раз и работать с глюками. Особенность проекта в том, что он запускается с 0x08020000 флэша (адрес указан линковщику в свойствах проекта), собирается в Keil'е. При выключении в system_stm32f4xx.c Prefetch Buffer (комментим FLASH_ACR_PRFTEN |) все работает как часы (как и до обновления библиотек). так же хотелось бы отметить, что при запуске проекта с 0x08000000 и включенном Prefetch Buffer все работает. глюки наблюдаются только если прога запускается не с начала флэш С чем это может быть связано? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KSN 0 22 марта, 2013 Опубликовано 22 марта, 2013 · Жалоба Проверьте NVIC - начало таблицы прерываний. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k000858 0 22 марта, 2013 Опубликовано 22 марта, 2013 · Жалоба Проверьте NVIC - начало таблицы прерываний. вроде как при указании линковщику адреса старта программы в свойствах проекта все делается автоматически? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edit2007 3 22 марта, 2013 Опубликовано 22 марта, 2013 · Жалоба Именно что линковщик автоматически переносит код на заданный адрес. А железка по привычке стартует с физически определенного разрабочиком. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k000858 0 22 марта, 2013 Опубликовано 22 марта, 2013 · Жалоба Именно что линковщик автоматически переносит код на заданный адрес. А железка по привычке стартует с физически определенного разрабочиком. если я все верно понимаю, необходимо задать в system_stm32f4xx.c #define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field. This value must be a multiple of 0x200. */ Если код стартует с 0x08020000, какое задавать смещение? 0x20000? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k000858 0 22 марта, 2013 Опубликовано 22 марта, 2013 · Жалоба в общем корректное размещение таблицы векторов прерываний проблему не решило. прошивка как и раньше запускается и корректно работает только при отключенном Prefetch Buffer Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 22 марта, 2013 Опубликовано 22 марта, 2013 · Жалоба А количество тактов для буфера вы правильно задали? От частоты зависит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k000858 0 22 марта, 2013 Опубликовано 22 марта, 2013 · Жалоба А количество тактов для буфера вы правильно задали? От частоты зависит. если это задается system_stm32f4xx.c, то все по дефолту кроме смещения таблицы векторов прерывания раз по дефолту Prefetch Buffer там включен, думаю, и остальные настройки, связанные с ним, должны быть корректны странно, то, что глюк проявляется только если пускать программу не 0x08000000 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 22 марта, 2013 Опубликовано 22 марта, 2013 · Жалоба если это задается system_stm32f4xx.c, то все по дефолту кроме смещения таблицы векторов прерывания раз по дефолту Prefetch Buffer там включен, думаю, и остальные настройки, связанные с ним, должны быть корректны Я библиотечными функциями не пользуюсь, сам биты в регистрах задаю, водя носом по мануалу. В stm32f4xx.h должна быть задана рабочая частота, в соответствии с которой установится латентность буфера предвыборки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vlad_new 1 22 марта, 2013 Опубликовано 22 марта, 2013 · Жалоба Где то кто то недавно жаловался, что при смещении адреса, таблица векторов по дефаулту стала создается в RAM, а не во Flesh, в результате то же как то там через раз у него все работало. Подробностей не знаю, читал по диаганали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HHIMERA 0 22 марта, 2013 Опубликовано 22 марта, 2013 · Жалоба описываю траблу: А что говорит errata??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k000858 0 25 марта, 2013 Опубликовано 25 марта, 2013 (изменено) · Жалоба А что говорит errata??? в документе http://www.st.com/st-web-ui/static/active/.../DM00037591.pdf по ключевому слову Prefetch Buffer ничего не найдено Я библиотечными функциями не пользуюсь, сам биты в регистрах задаю, водя носом по мануалу. В stm32f4xx.h должна быть задана рабочая частота, в соответствии с которой установится латентность буфера предвыборки. в system_stm32f4xx.c настраиваются все частоты думаю, тут так же все должно быть корректно. ведь когда прога запущена с 0x08000000 все ок. * 5. This file configures the system clock as follows: *========================================================================== === *========================================================================== === * Supported STM32F40xx/41xx/427x/437x devices *----------------------------------------------------------------------------- * System Clock source | PLL (HSE) *----------------------------------------------------------------------------- * SYSCLK(Hz) | 168000000 *----------------------------------------------------------------------------- * HCLK(Hz) | 168000000 *----------------------------------------------------------------------------- * AHB Prescaler | 1 *----------------------------------------------------------------------------- * APB1 Prescaler | 4 *----------------------------------------------------------------------------- * APB2 Prescaler | 2 *----------------------------------------------------------------------------- * HSE Frequency(Hz) | 25000000 *----------------------------------------------------------------------------- * PLL_M | 25 *----------------------------------------------------------------------------- * PLL_N | 336 *----------------------------------------------------------------------------- * PLL_P | 2 *----------------------------------------------------------------------------- * PLL_Q | 7 *----------------------------------------------------------------------------- * PLLI2S_N | NA *----------------------------------------------------------------------------- * PLLI2S_R | NA *----------------------------------------------------------------------------- * I2S input clock | NA *----------------------------------------------------------------------------- * VDD(V) | 3.3 *----------------------------------------------------------------------------- * Main regulator output voltage | Scale1 mode *----------------------------------------------------------------------------- * Flash Latency(WS) | 5 *----------------------------------------------------------------------------- * Prefetch Buffer | ON *----------------------------------------------------------------------------- * Instruction cache | ON *----------------------------------------------------------------------------- * Data cache | ON *----------------------------------------------------------------------------- * Require 48MHz for USB OTG FS, | Disabled * SDIO and RNG clock | *----------------------------------------------------------------------------- Изменено 25 марта, 2013 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба в документе http://www.st.com/st-web-ui/static/active/.../DM00037591.pdf по ключевому слову Prefetch Buffer ничего не найдено А просто по Prefetch есть вот что: 2.1.1 ART Accelerator prefetch queue instruction is not supported Description The ART Accelerator prefetch queue instruction is not supported on revision A devices. This limitation does not prevent the ART Accelerator from using the cache enable/disable capability and the selection of the number of wait states according to the system frequency. Workaround Revision A devices: none Revision Z devices: fixed. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба В некоторых случаях инициализировать периферию можно не сразу же после установки битов разрешения тактирования, а спустя несколько актов шины. "Шустрая" выборка может сказаться на этом процессе. Хотя, если Вы пользуетесь стандартной библиотекой... в ней этот момент должен быть учтен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k000858 0 25 марта, 2013 Опубликовано 25 марта, 2013 · Жалоба А просто по Prefetch есть вот что: на чипе написано STM32 F457IGH6 HPAEZ VG KOR ES 125 STM32 ST-LINK Utility показывает rev B В некоторых случаях инициализировать периферию можно не сразу же после установки битов разрешения тактирования, а спустя несколько актов шины. "Шустрая" выборка может сказаться на этом процессе. Хотя, если Вы пользуетесь стандартной библиотекой... в ней этот момент должен быть учтен. в том то и фишка, пользуюсь стандартными либами, в которых ничего не менял и ведь все работает если прогу запустить с 0x08000000 а если залить через IAP загрузчик у 0x08020000 к примеру - сразу глюк! при том, если Prefetch Buffer не включать, и точно так же залить в 0x08020000 - все идеально Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться