Jump to content

    

Димон Безпарольный

Участник
  • Content Count

    743
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Димон Безпарольный

  • Rank
    Знающий

Recent Profile Visitors

4109 profile views
  1. Также ругается на скаттер файл: Каким образом надо поменять скаттер чтобы таблица PDT разместилась первой? ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x08004800 0x00100000 { ; load region size_region ER_IROM1 0x08004800 0x00100000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x20000000 0x00018000 { ; RW data .ANY (+RW +ZI) } RW_IRAM2 0x10000000 UNINIT 0x0000400 { ;no init section. Эта область памяти закрыта аппаратной защитой *(.noinit )} RW_IRAM3 0x10000400 0x00008000 - 0x400 { .ANY (+RW +ZI) } }
  2. Включил опцию ReadOnly Position Independed. Получаю 700 варнингов: Нарыл только то, что статические переменные должны инициализироваться до динамических. https://fullstackuser.com/questions/529011/initialisation-of-static-variable-with-itself
  3. Так вроде выше привел скаттер - там адреса явно указаны. Имеется ввиду секция RW_IRAM2
  4. В итоге вот что получилось: ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_IROM1 0x08000000 0x00100000 { ; load region size_region ER_IROM1 0x08000000 0x00100000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x20000000 0x00018000 { ; RW data .ANY (+RW +ZI) } RW_IRAM2 0x10000000 UNINIT 0x0000400 { ;no init section *(.noinit )} RW_IRAM3 0x10000400 0x00008000 - 0x3FF { .ANY (+RW +ZI) } } Но ключа для линкера чтобы пометить область как неиспользуемую пока не нашел. Судя по MAP файлу, линкер отдает предпочтение области IRAM1 располагая там переменные. Область IRAM3 не используется линкером. Могу прописать явно модули в IRAM3, но пока не хочу.
  5. 1. Backup регистры уже использую, но объем маловат. 2. можно ли (и надо ли?) совместить пункты 2 и 3? Спасибо за ответы они уже помогли мне.
  6. Написал бутлоадер. Основной прошивке требуется хранение данных в необнуляемой области ОЗУ. Прописал эту область в Скаттере. Без бутлоадера все чудно работало. Сброс не портил данные. Но при применении бутлоадера данные терлись при перезагрузки прошивки. Изменил бутлоадер - прописал в скаттере такую же область и заработало. Память больше не портится при перезагрузки прошивки. Хотел бы узнать - какие тут подводные ками? Так вообще можно делать?
  7. С самого начала. printf и sprinf используется с \r\n на конце.
  8. Написал простое приложение с использованием WinApi для работы с железкой STM32. Создал окно Edit в который выводится лог. Прием по COM порту осуществил с использованием триады. Все что принял вывожу в окно Edit: RetBytes = comstat.cbInQue; //и получить из неё количество принятых байтов if(RetBytes) //если действительно есть байты для чтения { // ReadFile(hComPORT, bRead, RetBytes, &RetBytes, &overlapped); //прочитать байты из порта в буфер программы if (RetBytes > 0) // { // bRead[++RetBytes] = 0; //Завершающий 0 PrintMultitext(bRead); // } // Сам вывод в окно в отдельной функции: void PrintMultitext(const char* COMString) // { // static unsigned char NLine = 0; // SendMessage(hTextBOX, EM_SETSEL, 0, -1); // SendMessage(hTextBOX, EM_SETSEL, -1, -1); // SendMessage(hTextBOX, EM_REPLACESEL, 0, (LPARAM)COMString); // Работает но криво. Выводит вот так: Как - то можно это исправить?
  9. Я уже писал что неизвестно на каком адресе окажется прошивка. В нижней или верхней половине. Потому как прошивка может не запустится и тогда стартует предыдущая. На приборе нет ни одного органа управления и корпус герметичный. Кстати, Заказчика совершенно не волнует кража кода. Прибор специфичный. А как в этом случае, загрузчик тоже переместится во второй банк?
  10. Это две одинаковые прошивки одного проекта. По сути прошивка одна - но модифицированная. Если присланная модифицированная не пошла, откатываемся на предыдущую. В какой области FLASH в этом случае лежит прошивка предугадать невозможно.
  11. Это тяжело. Потому как прошивки должны лежать на сетевом ресурсе. Если одна не пошла, запускаем предыдущую с нижних адресов. Какая из прошивок не пойдет предугадать невозможно - кто из них окажется в верхней или нижней части памяти Flash.
  12. Кажется нашел Bare-metal Position Independent Executables A bare-metal Position Independent Executable (PIE) is an executable that does not need to be executed at a specific address. It can be executed at any suitably aligned address. https://developer.arm.com/documentation/100748/0618/Mapping-Code-and-Data-to-the-Target/Bare-metal-Position-Independent-Executables