Jump to content

    

Nixon

Админы
  • Content Count

    2846
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Nixon

  • Rank
    Гуру
  • Birthday 04/29/1974

Контакты

  • Сайт
    http://

Информация

  • Город
    Киев

Recent Profile Visitors

21315 profile views
  1. Старею, не распознал :)
  2. У вас тормозит "индусский" код? Тогда мы идем к вам!
  3. Не выдумывайте - это работа максимум на один день для программиста средней квалификации. Например для IAR: 1) oткрыть текстовый файл *.map 2) найти в нем блок "ENTRY LIST" 3) распарсить в массив "файл-функция-адрес-длина-тип" 4) найти свой адрес в этом массиве 5) вывести "файл-имя" Все. Строчек 100 кода на C#. Даже пример кода бросать не буду, чтоб интерес не убивать на корню.
  4. Можно. В настройках проекта, в категории Debugger увидите поле "Setup macro". Включите галочку и выберите/создайте макро файл с командами Язык этого файла С-подобен, пример execUserFlashInit() { // unlock flash __writeMemory32(0x45670123, 0x40023C04, "Memory"); // FLASH->FKEYR = FLASH_KEY1; __writeMemory32(0xCDEF89AB, 0x40023C04, "Memory"); // FLASH->FKEYR = FLASH_KEY2; } Более подробно читайте в help раздел "C-Spy Macro". По сути вы можете со своей целевой платформой творить все что захотите не загружая компилированную программу
  5. Мой бездумный копипаст :) . Спасибо за указание на ошибку. Исправил.
  6. struct TICKCOUNTER { inline static void RESET ( void ) { CoreDebug->DEMCR |= 0x01000000; DWT->CYCCNT = 0; DWT->CTRL = 0; } inline static void START ( void ) { DWT->CTRL |= 1; } inline static uint32_t STOP ( void ) { DWT->CTRL &= ~1; return DWT->CYCCNT; } }; Сделано по документации на M3.
  7. Исользуя С/С++ всегда есть возможность себе что-то отстрелить... :) Задача у меня была простая - есть проект в котором некоторые переменные должны иметь зеркало во внешней памяти (назовите это конфигом, архивом, аудитом и т.п.). Желательно было иметь функционал позволяющий без дополнительных усилий изменять список этих переменных, менять их расположение (внешней памяти может быть несколько видов, несколько копий и т.д.) в одном месте. Ну и конечно, вы правильно заметили - RAM мало, ROM много, желательно иметь элемент связи между переменной и ее зеркалом расположенный в ROM. Проблемы расположения переменных линкером в данном примере НЕ имеют влияния. P.S. Ранее этот движок был реализован на чистом С и требовал при модификации списка переменных изменений в 8 (!!!) местах проекта, что неимоверно раздражало, плюс таблицы адресов/типов/размеров переменных формировались в рантайме и кушали изрядный кусок RAM. P.S.S. Исправил ошибку - добавил НЕ
  8. Весь движок в vault.hpp. Fram.hpp и eeprom.hpp - это примеры создания НЕСКОЛЬКИХ объектов хранилища (требование моего проекта). Ну а в main.cpp собственно использование с массой ненужного.
  9. Можно. Недавно такую задачу решал - создание на этапе компиляции таблицы смещений параметров во внешней памяти по списку параметров. Посмотрите мой пример - это тестовый проект. Там много вам ненужного, но суть будет понятна. Основной файл - vault.hpp vault.7z
  10. Большинство недостатков препроцессора С++ ( не С, к сожалению только С++ и 11+ версий) нивелируются constexpr выражениями и шаблонами. Если у вас есть возможность использовать такие компиляторы то попробуйте, не пожалеете.
  11. Я постараюсь или убрать или как то сократить данный список
  12. Edit -> Find дальше выбираете тип объекта и или выбираете или подсвечиваете
  13. Не поможет. Точнее поможет только в примитивных случаях.