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

STM32407 IAR 8.50.6 разместить байты по адресу во FLASH

26 минут назад, Pasa сказал:

Действительно печальная ситуация. Мне казалось  что "Гуру" должен отличать совершенно разные вещи - исполнение кода(ваши любимые листинги) и генерацию выходного hex-файла с размещением в этом выходном файле заданных заранее констант.

Ну если этот hex-файл не надо потом исполнять - да, это разные вещи.

Но почему тогда вы говорите о:

Цитата

Собранный мной утром проект полностью  прекрасно запустился на железе.

?

Цитата

Использование же ранее ваших "листингов" приводило к отрицательному результату.

Есть такой замечательный драйвер: ruki.sys  :biggrin:

 

И кто-то грозился привести примеры кода, когда:

15 часов назад, Pasa сказал:

Ладно. Еще раз. Вызывались функции, которые обращались к данной константе, производили с с ее значением различные действия и распечатывали все это на консоли.

который мы так и не увидели.

Так увидим мы всё-таки тот удивительный код, который реально использовал некую константу (объявленную с volatile) и она при этом "не попадала во флешь"?

Если такое у вас и было, то это как раз тот случай, который показан в моих листингах. Про создание компилятором копий констант. Которые вы так и не поняли.  

Приводить вам ещё что-то - бессмысленно, ведь вы и того, что ранее здесь приведно не понимаете.... :unknw:

 

10 минут назад, Sergey_Aleksandrovi4 сказал:

Странно конечно, что мой вариант объявления переменной, но с квалификатором volatile, оказался нерабочим.

Он рабочий. Тут дело не в инструменте, а в исполнителе.  :unknw:

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


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

25 minutes ago, Sergey_Aleksandrovi4 said:

оказался нерабочим.

Может версия IAR 8.50.6 ? Ну вот никак в выходной hex при добавлении volatile константа не лезла.

18 minutes ago, jcxz said:

Ну если этот hex-файл не надо потом исполнять

Давайте прекратим это все. Вы не понимаете сути происходящего и это приводит к дикому засорению топика "листингами", от которых нет никакого толка.

Судя по количеству ваших постов я начинаю понимать каким образом их число скоро перевалит за миллион.

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


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

27 minutes ago, Sergey_Aleksandrovi4 said:

Странно конечно, что мой вариант объявления переменной, но с квалификатором volatile, оказался нерабочим.

Я этим способом пользовался в нескольких проектах для объявления массива констант в загрузчике. Была включена оптимизация кода по размеру, уровень не вспомню за давностью лет. Основное приложение обращалось к ним исключительно по указателю. Сам загрузчик к этим переменным никак не обращался.

При вашем варианте и загрузчик и основное приложение нормально все читают.

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


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

Можно попробовать определить константы в другом си-файле с указанием адреса/секции размещения без всяких root и т.д.

Создать заголовочный файл с объявлением констант как extern const.

А в остальных файлах программы подключать этот заголовочный файл.

В таком случае всё корректно работает. Например, мы так храним настройки в info/flash-памяти MSP430, которые могут меняться пользователем.

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


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

1 hour ago, ivan24190 said:

с указанием адреса/секции размещения без всяких root

Наверное можно. В первом топике я пробовал через секции(примеры из инета). Не получилось. Может компиляторы/линкеры разные...

Если не трудно - дайте примеры попробовать, скажем одну константу занести во flash по определенному адресу.

Желательно без обращения к ней из приложения в котором она объявлена.

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


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

IAR

//Базовая структура состояния хидера - во флеше
#pragma location="FLASH"
const HeaderSystemParamStruct FactoryFlashHdrSysParStr= //Начальное заполнение структуры данными флеши проца
{HDR_SYS_PAR_STR_ID,//Идентификатор типа структуры

...

};

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


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

13 hours ago, rudy_b said:

//   92 #pragma location="FLASH"

        SECTION FLASH:CONST:REORDER:NOROOT(2)

Интересует ваш вариант, если константы нужно поместить в конкретный адрес.

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


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

У меня не возникало такой необходимости, но в хелпе IAR указано следующее

Example
#pragma location=0xFFFF0400
_ _no_init volatile char PORT1;  /* PORT1 is located at address 0xFFFF0400 */
 
#pragma location=R8
_ _no_init int TASK; /* TASK is placed in R8 */

#pragma location="FLASH"
char PORT2; /* PORT2 is located in section FLASH */

/* A better way is to use a corresponding mechanism */
#define FLASH _Pragma("location=\"FLASH\"")
/* ... */
FLASH int i; /* i is placed in the FLASH section */

 

Страница хелпа

DataLocation.pdf

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


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

Можно использовать данную функцию для записи во flash с помощью HAL библиотеки:

void Write_Flash(uint8_t data)
{
     HAL_FLASH_Unlock();
     __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR | FLASH_FLAG_PGAERR | FLASH_FLAG_PGSERR );
     FLASH_Erase_Sector(FLASH_SECTOR_6, VOLTAGE_RANGE_3);
     HAL_FLASH_Program(TYPEPROGRAM_WORD, FlashAddress, data);
     HAL_FLASH_Lock();
}

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


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

2 минуты назад, dsl2640free сказал:

Можно использовать данную функцию для записи во flash с помощью HAL библиотеки...

Вы тему читали? Лишь бы че-нить вбросить... на вентилятор.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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