Перейти к содержанию
    

описываю траблу:

Обновил в проекте библиотеки CMSIS до 1.1.0, в которых включен Prefetch Buffer, после чего откомпилированная прога стала странно себя вести: загружаться через раз и работать с глюками.

Особенность проекта в том, что он запускается с 0x08020000 флэша (адрес указан линковщику в свойствах проекта), собирается в Keil'е. При выключении в system_stm32f4xx.c Prefetch Buffer (комментим FLASH_ACR_PRFTEN |) все работает как часы (как и до обновления библиотек).

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

 

С чем это может быть связано?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проверьте NVIC - начало таблицы прерываний.

вроде как при указании линковщику адреса старта программы в свойствах проекта все делается автоматически?

post-69978-1363930030_thumb.jpg

post-69978-1363930039_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Именно что линковщик автоматически переносит код на заданный адрес. А железка по привычке стартует с физически определенного разрабочиком.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Именно что линковщик автоматически переносит код на заданный адрес. А железка по привычке стартует с физически определенного разрабочиком.

если я все верно понимаю, необходимо задать в system_stm32f4xx.c

#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.

This value must be a multiple of 0x200. */

 

Если код стартует с 0x08020000, какое задавать смещение? 0x20000?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в общем корректное размещение таблицы векторов прерываний проблему не решило. прошивка как и раньше запускается и корректно работает только при отключенном Prefetch Buffer

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А количество тактов для буфера вы правильно задали? От частоты зависит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А количество тактов для буфера вы правильно задали? От частоты зависит.

если это задается system_stm32f4xx.c, то все по дефолту кроме смещения таблицы векторов прерывания

раз по дефолту Prefetch Buffer там включен, думаю, и остальные настройки, связанные с ним, должны быть корректны

 

странно, то, что глюк проявляется только если пускать программу не 0x08000000

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если это задается system_stm32f4xx.c, то все по дефолту кроме смещения таблицы векторов прерывания

раз по дефолту Prefetch Buffer там включен, думаю, и остальные настройки, связанные с ним, должны быть корректны

Я библиотечными функциями не пользуюсь, сам биты в регистрах задаю, водя носом по мануалу. В stm32f4xx.h должна быть задана рабочая частота, в соответствии с которой установится латентность буфера предвыборки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Где то кто то недавно жаловался, что при смещении адреса, таблица векторов по дефаулту стала создается в RAM, а не во Flesh, в результате то же как то там через раз у него все работало. Подробностей не знаю, читал по диаганали.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что говорит 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					 |
 *-----------------------------------------------------------------------------

Изменено пользователем IgorKossak
[codebox] для длинного кода, [code] - для короткого!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в документе 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А просто по Prefetch есть вот что:

на чипе написано

STM32

F457IGH6

HPAEZ VG

KOR ES 125

 

STM32 ST-LINK Utility показывает rev B

 

 

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

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

и ведь все работает если прогу запустить с 0x08000000

а если залить через IAP загрузчик у 0x08020000 к примеру - сразу глюк!

 

при том, если Prefetch Buffer не включать, и точно так же залить в 0x08020000 - все идеально

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...