jcxz 184 23 ноября, 2021 Опубликовано 23 ноября, 2021 · Жалоба 26 минут назад, Pasa сказал: Действительно печальная ситуация. Мне казалось что "Гуру" должен отличать совершенно разные вещи - исполнение кода(ваши любимые листинги) и генерацию выходного hex-файла с размещением в этом выходном файле заданных заранее констант. Ну если этот hex-файл не надо потом исполнять - да, это разные вещи. Но почему тогда вы говорите о: Цитата Собранный мной утром проект полностью прекрасно запустился на железе. ? Цитата Использование же ранее ваших "листингов" приводило к отрицательному результату. Есть такой замечательный драйвер: ruki.sys И кто-то грозился привести примеры кода, когда: 15 часов назад, Pasa сказал: Ладно. Еще раз. Вызывались функции, которые обращались к данной константе, производили с с ее значением различные действия и распечатывали все это на консоли. который мы так и не увидели. Так увидим мы всё-таки тот удивительный код, который реально использовал некую константу (объявленную с volatile) и она при этом "не попадала во флешь"? Если такое у вас и было, то это как раз тот случай, который показан в моих листингах. Про создание компилятором копий констант. Которые вы так и не поняли. Приводить вам ещё что-то - бессмысленно, ведь вы и того, что ранее здесь приведно не понимаете.... 10 минут назад, Sergey_Aleksandrovi4 сказал: Странно конечно, что мой вариант объявления переменной, но с квалификатором volatile, оказался нерабочим. Он рабочий. Тут дело не в инструменте, а в исполнителе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pasa 0 23 ноября, 2021 Опубликовано 23 ноября, 2021 · Жалоба 25 minutes ago, Sergey_Aleksandrovi4 said: оказался нерабочим. Может версия IAR 8.50.6 ? Ну вот никак в выходной hex при добавлении volatile константа не лезла. 18 minutes ago, jcxz said: Ну если этот hex-файл не надо потом исполнять Давайте прекратим это все. Вы не понимаете сути происходящего и это приводит к дикому засорению топика "листингами", от которых нет никакого толка. Судя по количеству ваших постов я начинаю понимать каким образом их число скоро перевалит за миллион. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pasa 0 23 ноября, 2021 Опубликовано 23 ноября, 2021 · Жалоба 27 minutes ago, Sergey_Aleksandrovi4 said: Странно конечно, что мой вариант объявления переменной, но с квалификатором volatile, оказался нерабочим. Я этим способом пользовался в нескольких проектах для объявления массива констант в загрузчике. Была включена оптимизация кода по размеру, уровень не вспомню за давностью лет. Основное приложение обращалось к ним исключительно по указателю. Сам загрузчик к этим переменным никак не обращался. При вашем варианте и загрузчик и основное приложение нормально все читают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivan24190 0 23 ноября, 2021 Опубликовано 23 ноября, 2021 · Жалоба Можно попробовать определить константы в другом си-файле с указанием адреса/секции размещения без всяких root и т.д. Создать заголовочный файл с объявлением констант как extern const. А в остальных файлах программы подключать этот заголовочный файл. В таком случае всё корректно работает. Например, мы так храним настройки в info/flash-памяти MSP430, которые могут меняться пользователем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pasa 0 23 ноября, 2021 Опубликовано 23 ноября, 2021 · Жалоба 1 hour ago, ivan24190 said: с указанием адреса/секции размещения без всяких root Наверное можно. В первом топике я пробовал через секции(примеры из инета). Не получилось. Может компиляторы/линкеры разные... Если не трудно - дайте примеры попробовать, скажем одну константу занести во flash по определенному адресу. Желательно без обращения к ней из приложения в котором она объявлена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rudy_b 1 24 ноября, 2021 Опубликовано 24 ноября, 2021 · Жалоба IAR //Базовая структура состояния хидера - во флеше #pragma location="FLASH" const HeaderSystemParamStruct FactoryFlashHdrSysParStr= //Начальное заполнение структуры данными флеши проца {HDR_SYS_PAR_STR_ID,//Идентификатор типа структуры ... }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pasa 0 25 ноября, 2021 Опубликовано 25 ноября, 2021 · Жалоба 21 hours ago, rudy_b said: #pragma location="FLASH" А как у вас секция "FLASH" описана? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rudy_b 1 25 ноября, 2021 Опубликовано 25 ноября, 2021 · Жалоба // 92 #pragma location="FLASH" SECTION FLASH:CONST:REORDER:NOROOT(2) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pasa 0 26 ноября, 2021 Опубликовано 26 ноября, 2021 · Жалоба 13 hours ago, rudy_b said: // 92 #pragma location="FLASH" SECTION FLASH:CONST:REORDER:NOROOT(2) Интересует ваш вариант, если константы нужно поместить в конкретный адрес. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rudy_b 1 26 ноября, 2021 Опубликовано 26 ноября, 2021 · Жалоба У меня не возникало такой необходимости, но в хелпе 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dsl2640free 0 7 декабря, 2021 Опубликовано 7 декабря, 2021 · Жалоба Можно использовать данную функцию для записи во 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(); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 7 декабря, 2021 Опубликовано 7 декабря, 2021 · Жалоба 2 минуты назад, dsl2640free сказал: Можно использовать данную функцию для записи во flash с помощью HAL библиотеки... Вы тему читали? Лишь бы че-нить вбросить... на вентилятор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться