Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия Следующая версия Следующая версия справа и слева | ||
ob:o7:debug [2016/09/08 05:58] иван_денисов [Пример] |
ob:o7:debug [2018/05/24 14:10] shiryaev.a.v [Сторожевой таймер] WWDG |
||
---|---|---|---|
Строка 40: | Строка 40: | ||
Аварийные остановки сообщают program counter **pc** и положение в исходном тексте модуля **pos**, поэтому, | Аварийные остановки сообщают program counter **pc** и положение в исходном тексте модуля **pos**, поэтому, | ||
- Используя значение **pc** узнать модуль, | - Используя значение **pc** узнать модуль, | ||
- | - По номеру положения **pos** (номер символа) найти место в исходном тексте модуля | + | - По номеру положения **pos** (номер символа) найти место в исходном тексте модуля |
Для микроконтроллеров NXP достаточно **pc** поделить на 2 (т. к. команды Thumb 2-байтные). Потом сравнить полученное число со списком вывода команды O7ARMv{6, | Для микроконтроллеров NXP достаточно **pc** поделить на 2 (т. к. команды Thumb 2-байтные). Потом сравнить полученное число со списком вывода команды O7ARMv{6, | ||
- | Для микроконтроллеров STM32 надо предварительно из **pc** вычесть 8000000H, так как программа начинает | + | Для микроконтроллеров STM32 надо предварительно из **pc** вычесть 8000000H, так как программа |
Строка 59: | Строка 59: | ||
- | ===== Пример ===== | + | ===== Пример |
+ | Чтобы осуществлять отладку микроконтроллера необходимо обмениваться сообщениями. Более подробно организация обмена описана в заметке [[ob: | ||
< | < | ||
Строка 67: | Строка 68: | ||
Traps := MicroARMv7MTraps, | Traps := MicroARMv7MTraps, | ||
Sys := MicroSTM32F103x8System, | Sys := MicroSTM32F103x8System, | ||
- | TPs := MicroSTM32F103x8TPorts; | + | Pins := MicroSTM32F10xPinCfg, |
+ | TPs := MicroSTM32F1TPorts; | ||
CONST | CONST | ||
Строка 89: | Строка 91: | ||
PROCEDURE Init; | PROCEDURE Init; | ||
- | VAR ok: BOOLEAN; | + | VAR ok: BOOLEAN; par: TPs.InitPar; |
BEGIN | BEGIN | ||
- | TPs.Init(p0, | + | 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, | ||
+ | |||
TPs.Send(p0, | TPs.Send(p0, | ||
IF Traps.trapFlag THEN | IF Traps.trapFlag THEN | ||
Строка 108: | Строка 119: | ||
В журнал будет выведена информация о модулях. | В журнал будет выведена информация о модулях. | ||
- | < | + | < |
- | 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</ | + | ROM: 6816 B; RAM: 748 B |
+ | </ | ||
Строка 136: | Строка 147: | ||
p: TP.Port; | p: TP.Port; | ||
mh: MessagesHandler; | mh: MessagesHandler; | ||
- | В подсистеме Micro есть удобный инструмент для организации обмена сообщениями между контроллером и компьютером. | ||
- | |||
- | На Linux удобно установить права доступа к COM-портам: | ||
- | |||
- | sudo usermod -a -G dialout $USER | ||
- | |||
- | Чтобы в Wine работать с COM-портами, | ||
- | |||
PROCEDURE Send*(t: INTEGER); | PROCEDURE Send*(t: INTEGER); | ||
Строка 188: | Строка 191: | ||
< | < | ||
- | For Linux | + | Для |
< | < | ||
Строка 195: | Строка 198: | ||
В журнал Блэкбокса будет выведена информация: | В журнал Блэкбокса будет выведена информация: | ||
- | < | + | < |
- | pos: | + | pos: |
code: 7</ | code: 7</ | ||
- | Program Counter (pc) равен | + | Program Counter (pc) равен |
+ | |||
+ | Чтобы перейти к положению ошибки в модуле, | ||
+ | |||
+ | |||
+ | ===== Сторожевой таймер ===== | ||
+ | |||
+ | См. MicroARMv7MSTM32F4WWDG. | ||
+ | Нужно выполнить Init и потом периодически вызывать процедуру Update. | ||
+ | |||
+ | При " | ||
+ | |||
+ | |||
+ | " | ||
+ | |||
+ | |||
+ | ---- | ||
- | Чтобы перейти к положению ошибки | + | Авторы заметки: [[http:// |