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

IAR 8.2 STM32 Breakpoint

Добрый день.

Программа загрузчика, средствами линкера, перенесены в RAM.

Проблем нет, всё работает как нужно.

Но, отлаживать в IARе средствами Breakpoint, не получается, он не понимает, что код переехал в RAM.

В Eclipse с этим никаких вопросов нет, всё штатно.

Есть ли какие настройки ? Или IAR этого не умеет ?

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


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

Где вручную ? Всё автоматизировано !

 

SETTING BREAKPOINTS IN __RAMFUNC DECLARED FUNCTIONS
A breakpoint set in a __ramfunc declared function might in some cases not trigger if it
is the first reached breakpoint after system initialization. The reason is that software
breakpoints are written to memory before the startup code has copied the content of
__ramfunc declared functions to RAM, causing the placed breakpoints to be
overwritten. Hardware breakpoints are not affected by this. Using the Run to main
option will, in most cases, resolve this issue because the breakpoints will be re-applied
when you click the Go button.
The only case where using Run to main will not work is if __ramfunc declared
functions are accessed from constructors of global objects. In this case, you must place
an extra breakpoint on the __call_ctors function.

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


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

17 часов назад, x893 сказал:

Где вручную ? Всё автоматизировано !

 

SETTING BREAKPOINTS IN __RAMFUNC DECLARED FUNCTIONS
A breakpoint set in a __ramfunc declared function might in some cases not trigger if it
is the first reached breakpoint after system initialization. The reason is that software
breakpoints are written to memory before the startup code has copied the content of
__ramfunc declared functions to RAM, causing the placed breakpoints to be
overwritten. Hardware breakpoints are not affected by this. Using the Run to main
option will, in most cases, resolve this issue because the breakpoints will be re-applied
when you click the Go button.
The only case where using Run to main will not work is if __ramfunc declared
functions are accessed from constructors of global objects. In this case, you must place
an extra breakpoint on the __call_ctors function.

Всё бы хорошо ...

Закат в ручную вот почему, в коде ни одна функция не имеет идентификатора __ramfunc.

Весь код средством линкера копируется в ram.

В eclipse, поставил точки в коде и всё.

А тут надо бубен доставать, наверное ...

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


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

23 minutes ago, -=az=- said:

Весь код средством линкера копируется в ram.

Линкер только секцию создает. Ничего он не копирует.

Копируется при старте. Смотрите Reset_Handler (или что там у Вас запускается).

Что то типа такого в .c/.h

__attribute__ ((section(".ramfunc")))

И в ld файле

    . = ALIGN(4); 
    _etext = .;
    .relocate : AT (_etext)
    {
        . = ALIGN(4);
        _srelocate = .;
        *(.ramfunc .ramfunc.*);
        *(.data .data.*);
        . = ALIGN(4);
        _erelocate = .;
    } > ram

И при старте

    pSrc = &_etext ;
    pDest = &_srelocate ;

    if ( pSrc != pDest )
        while (pDest < &_erelocate)
            *pDest++ = *pSrc++;
 

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


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

Я про iar, копирует весь код строкой (файл icf):

initialize by copy { readonly, readwrite };

 

Изменено пользователем -=az=-

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


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

1 час назад, -=az=- сказал:

initialize by copy { readonly, readwrite };

Ну потому что это глупость. Нужно либо просто ROM_region прописать по адресам RAM, либо сделать

place in RAM_region   { readonly , readwrite };

Загружать код в RAM будет либо отладчик для отладки, либо загрузчик в штатном режиме.

И вообще, для отладки один icf, для релиза другой.

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


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

Взял IAR 8.40

Перед функцией поставил __ramfunc и нормально BP ставятся и останавливается в RAM.

В icf всё по умолчанию

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


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

7 часов назад, VladislavS сказал:

Ну потому что это глупость. Нужно либо просто ROM_region прописать по адресам RAM, либо сделать


place in RAM_region   { readonly , readwrite };

Загружать код в RAM будет либо отладчик для отладки, либо загрузчик в штатном режиме.

И вообще, для отладки один icf, для релиза другой.

Не понял почему глупость.

Сделано именно как рекомендует производитель iar: https://www.iar.com/support/tech-notes/general/execute-in-ram-after-copying-from-flashrom-v5.20-and-later/

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


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

Объясните цель, зачем это в вашем случае нужно? Для отладки можно просто скомпилировать код в RAM и не использовать flash совсем. Для прошивки flash из кода достаточно пометить функцию-прошивальщик как __ramfunc. Чего вы добиваетесь копированием почти всего кода в RAM? В микроконтроллерах STM32 код из flash выполняется ни чуть не хуже. Разве что с целью экономить энергию отключением тактирования flash, но что-то мне подсказывает, что это не ваш случай.

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


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

Подключил дебагер OpenOCD, и вся отладка заработала как нужно.

Как и предполагалось дебагер в iar не айс ...

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


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

1 hour ago, -=az=- said:

Как и предполагалось дебагер в iar не айс ...

Я бы поспорил, дебагер в IAR(C SPY) это то ради чего можно терпеть его IDE c примитивной подсветкой и иногда неработающей навигацией по коду и автодополнением.
Дебагер всегда и сразу работает с любым поддерживаемым программатором без танцев с бубном, отладочная сессия держится сутками, поддержка плагинов, LOG breakpoint'ы аналогов я не видел не у кого(давно ситуацию не мониторил, буду рад услышать обратное) а еще макросы и куча всякий мелких фич которые значительно ускоряют отладку и поиск проблем.

Единственный минус IAR, это редактор с отсутствием подсветки #if веток и конечно цена$$$$.

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


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

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

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

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

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

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

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

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

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

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