Инструменты пользователя

Инструменты сайта


ob:o7:debug

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
ob:o7:debug [2016/09/08 06:07]
иван_денисов [Пример]
ob:o7:debug [2020/10/29 07:08] (текущий)
Строка 59: Строка 59:
  
  
-===== Пример отладчика=====+===== Пример отладчика =====
  
 Чтобы осуществлять отладку микроконтроллера необходимо обмениваться сообщениями. Более подробно организация обмена описана в заметке [[ob:o7:trimble|Обмен сообщениями с контроллером]]. Чтобы осуществлять отладку микроконтроллера необходимо обмениваться сообщениями. Более подробно организация обмена описана в заметке [[ob:o7:trimble|Обмен сообщениями с контроллером]].
Строка 68: Строка 68:
  Traps := MicroARMv7MTraps,  Traps := MicroARMv7MTraps,
  Sys := MicroSTM32F103x8System,  Sys := MicroSTM32F103x8System,
- TPs := MicroSTM32F103x8TPorts;+ Pins := MicroSTM32F10xPinCfg, 
 + TPs := MicroSTM32F1TPorts;
  
  CONST  CONST
Строка 90: Строка 91:
  
  PROCEDURE Init;  PROCEDURE Init;
- VAR ok: BOOLEAN;+ VAR ok: BOOLEAN; par: TPs.InitPar;
  BEGIN  BEGIN
- TPs.Init(p0, TPs.USART119200TPs.parityNoneReceive);+ par.n := TPs.USART1
 + par.RXPinPort := Pins.A; par.RXPinN := 10; 
 + par.TXPinPort := Pins.A; par.TXPinN := 9; 
 + par.UCLK := Sys.PCLK2; 
 + par.baud := 19200
 + par.parity := TPs.parityNone
 + par.receive := Receive
 + par.version2 := 2; 
 + TPs.Init(p0, par); 
 +
  TPs.Send(p0, idInit, 0, 0, ok); (* required for "heating" UART *)  TPs.Send(p0, idInit, 0, 0, ok); (* required for "heating" UART *)
  IF Traps.trapFlag THEN  IF Traps.trapFlag THEN
Строка 109: Строка 119:
  
 В журнал будет выведена информация о модулях. В журнал будет выведена информация о модулях.
-<code>OARMv7MLinker 3.6.2016 +<code>linking MobxAssert Ok
-linking MobxAssert Ok+
  MicroARMv7M 256  MicroARMv7M 256
- MicroKernel0 264 + MicroKernel0 301 
- MicroARMv7MTraps 950 + MicroARMv7MTraps 987 
- MicroSTM32F10xxD 1224 + MicroSTM32F10xxD 1283 
- MicroSTM32F103x8System 1227 + MicroSTM32F103x8System 1286 
- MicroSTM32F10xPinCfg 1476 + MicroSTM32F10xPinCfg 1535 
- MicroSTM32F103x8TPorts 1603 + MicroSTM32F1TPorts 1662 
- MobxAssert 3019 + MobxAssert 3146 
-ROM: 6384 B; RAM: 508 B</code>+ROM: 6816 B; RAM: 748 B 
 +</code>
  
  
Строка 181: Строка 191:
 <code>^Q "MobxDebug.Open('COM1')"</code> <code>^Q "MobxDebug.Open('COM1')"</code>
  
-For Linux+Для Linux будет следующая команда:
 <code>^Q "MobxDebug.Open('/dev/ttyUSB0')"</code> <code>^Q "MobxDebug.Open('/dev/ttyUSB0')"</code>
  
Строка 188: Строка 198:
  
 В журнал Блэкбокса будет выведена информация: В журнал Блэкбокса будет выведена информация:
-<code>pc:  3028 +<code>pc:  3155 
-pos:  309+pos:  337
 code:  7</code> code:  7</code>
  
-Program Counter (pc) равен 3028, что больше 3019 (см. информацию при сборке), а значит аварийная остановка произошла в модуле MobxAssert в положении 309 с кодом 7.+Program Counter (pc) равен 3155, что больше 3146 (см. информацию при сборке), а значит аварийная остановка произошла в модуле MobxAssert в положении 337 с кодом 7.
  
 Чтобы перейти к положению ошибки в модуле, удобно воспользоваться инструментом **O7->Position**. Чтобы перейти к положению ошибки в модуле, удобно воспользоваться инструментом **O7->Position**.
 +
 +
 +===== Сторожевой таймер =====
 +
 +Чтобы определить, когда микроконтроллер «завис» в бесконечном цикле, полезным инструментом является сторожевой таймер **MicroARMv7MSTM32F4WWDG** ([[https://github.com/aixp/O7/blob/master/Micro/Files/STM32F4IWDG.odc|github]]).
 +
 +Чтобы его использовать, сначала необходимо выполнить процедуру **Init**, и затем периодически вызывать процедуру **Update**. Тогда, при «зависании» микроконтроллера сработает **аварийная остановка с кодом 20**, и возможно определить место в программе, где это произошло (**Traps.trap.pc**)
 +
 +Более универсальный сторожевой таймер не имеет возможности определения места остановки: **MicroSTM32FxIWDG** ([[https://github.com/aixp/O7/blob/master/Micro/Files/STM32FxIWDG.odc|github]]). Но зато он работает на любых типах микроконтроллеров моделей STM32F.
 +
 +
 +----
 +
 +Авторы заметки: [[http://iadenisov.ru|И. А. Денисов]], А. В. Ширяев
  
ob/o7/debug.1473304064.txt.gz · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)