Какой простой метод я могу использовать для отладки встроенного процессора без последовательного порта или видео?

Когда вы объявляете ссылочную переменную (т. е. объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа int:

int x;
x = 10;

В этом примере переменная x является int, и Java инициализирует ее для 0. Когда вы назначаете его 10 во второй строке, ваше значение 10 записывается в ячейку памяти, на которую указывает x.

Но когда вы пытаетесь объявить ссылочный тип, произойдет что-то другое. Возьмите следующий код:

Integer num;
num = new Integer(10);

Первая строка объявляет переменную с именем num, но она не содержит примитивного значения. Вместо этого он содержит указатель (потому что тип Integer является ссылочным типом). Поскольку вы еще не указали, что указать на Java, он устанавливает значение null, что означает «Я ничего не указываю».

Во второй строке ключевое слово new используется для создания экземпляра (или создания ) объекту типа Integer и переменной указателя num присваивается этот объект. Теперь вы можете ссылаться на объект, используя оператор разыменования . (точка).

Exception, о котором вы просили, возникает, когда вы объявляете переменную, но не создавали объект. Если вы попытаетесь разыменовать num. Перед созданием объекта вы получите NullPointerException. В самых тривиальных случаях компилятор поймает проблему и сообщит вам, что «num не может быть инициализирован», но иногда вы пишете код, который непосредственно не создает объект.

Например, вы можете имеют следующий метод:

public void doSomething(SomeObject obj) {
   //do something to obj
}

В этом случае вы не создаете объект obj, скорее предполагая, что он был создан до вызова метода doSomething. К сожалению, этот метод можно вызвать следующим образом:

doSomething(null);

В этом случае obj имеет значение null. Если метод предназначен для того, чтобы что-то сделать для переданного объекта, целесообразно бросить NullPointerException, потому что это ошибка программиста, и программисту понадобится эта информация для целей отладки.

Альтернативно, там могут быть случаи, когда цель метода заключается не только в том, чтобы работать с переданным в объекте, и поэтому нулевой параметр может быть приемлемым. В этом случае вам нужно будет проверить нулевой параметр и вести себя по-другому. Вы также должны объяснить это в документации. Например, doSomething может быть записано как:

/**
  * @param obj An optional foo for ____. May be null, in which case 
  *  the result will be ____.
  */
public void doSomething(SomeObject obj) {
    if(obj != null) {
       //do something
    } else {
       //do something else
    }
}

Наконец, Как определить исключение & amp; причина использования Трассировки стека

5
задан Benoit 16 September 2008 в 04:55
поделиться

8 ответов

Самыми простыми большая часть масштабируемого решения являются светодиоды состояния. Переключите светодиоды на основе действий, или в двоичной форме или когда определенные действия происходят, если можно сузить фокус.

Самыми мощными будут аппаратные средства устройство JTAG. Вы не должны даже устанавливать точки останова - просто способность остановить приложение и осмотреть состояние памяти может быть достаточно. Обратите внимание, что некоторые аппаратные платформы не поддерживают "необычные" опции, такие как часы памяти или аппаратные точки останова. Первый обычно работается вокруг с постоянной остановкой процессора, и чтение памяти (превращает Вашу систему на 10 МГц в систему на 1 кГц), в то время как последний иногда выполняется с помощью замены кода (замените целенаправленную инструкцию другим переходом), который иногда маскирует другие проблемы. Знайте об этих проблемах и который встроил процессоры, к которым они относятся.

10
ответ дан 18 December 2019 в 08:33
поделиться

Это зависит от типа отладки этого, Вы пытаетесь сделать - в особенности, если Вы после временного метода трассировки или при попытке обеспечить инструмент, который может использоваться в качестве признака состояния во время срока действия проекта (или продукт).

Для одного прочь, подробно исходная трассировка и отладка внутрисхемного отладчика (например, jtag) могут быть очень полезными. Однако они являются самыми полезными, где Ваша отладка требует точек останова установки и исследования памяти и регистров - который делает его из небольшого преимущества, где Вы имеете дело строго ограниченные во времени проблемы.

Где необходимо определить состояние программы, не оказывая значительное влияние на выполнение системы, использование светодиодов, подключенных к запасным контактам ввода-вывода, будет полезно. Они могут также использоваться в качестве входа к цифровому запоминающему осциллографу (DSO) или анализатору логики. Эта техника может быть сделана более мощной путем выбора уникальных шаблонов импульсов, которые идентифицируются на DSO.

Для более универсального средства отладки, тем не менее, последовательный порт является хорошим решением. Для сохранения стоимости и агента по операциям с недвижимостью PCB, можно найти полезным использовать сменный модуль, который содержит преобразователи RS232.

При попытке обеспечить долгосрочный признак состояния как часть нормального функционирования Вашего продукта, светодиоды являются снова дешевым простой метод. Однако в этой ситуации лучше выбирать шаблоны импульсов, которые являются достаточно медленными, чтобы быть легко определенными визуальным контролем. Это будет все Вы со временем, Вы изучите конкретный шаблон, который представляет "нормальное" поведение.

2
ответ дан 18 December 2019 в 08:33
поделиться

Существует несколько стратегий, которые можно использовать для помощи с отладкой:

Если Вы имеете Выходные контакты в наличии, можно сцепить их до светодиодов (или осциллограф) и переключить выходные контакты высокий/низкий, чтобы указать, что определенные моменты были достигнуты в коде.
Например, 1 мигание могло бы быть загруженной программой, 2 мигания являются инициализированным foozbar, 3 мигания принимают исходные данные...

Если Вы имеете несколько выходных строк в наличии, можно использовать 7 сегментов LED для передачи большей информации (числа/буквы вместо миганий).

Если у Вас есть возможности считать память и иметь некоторую RAM в наличии, можно использовать функцию спринта, чтобы сделать подобную printf отладку, но вместо того, чтобы идти в экран/последовательный порт, она записана в памяти.

5
ответ дан 18 December 2019 в 08:33
поделиться

Можно легко эмулировать последовательную передачу данных (UARTs) использование стука бита от контактов IO системы. Сцепите его с одним из контактов карты, и подключение к преобразователю RS232 там (TTL к преобразователям RS232 легки или купить или создать), который переходит к последовательному порту Вашего ПК.

2
ответ дан 18 December 2019 в 08:33
поделиться

Отладчик JTAG является также опцией, хотя громоздкий для установки.

0
ответ дан 18 December 2019 в 08:33
поделиться

Если у Вас нет JTAG, светодиоды, предложенные другими, являются прекрасной идеей - хотя Вы действительно склонны заканчивать в тестировать/восстанавливать цикле, чтобы попытаться разыскать проблему.

Если Вы имеете больше времени и экономите аппаратные контакты и память для экономии, Вы всегда могли разрядный удар низкоскоростной последовательный интерфейс. Я нашел это довольно полезным в прошлом.

0
ответ дан 18 December 2019 в 08:33
поделиться

Другие предложили некоторые довольно хорошие идеи с помощью выходных контактов, таким образом, я не предположу, что, хотя это может быть очень хорошее решение, и очень экономически эффективно. Если Ваш бюджет и целевой процессор поддерживают его, аппаратная система трассировки, (или старомодный эмулятор или необычный BDM с шиной, отслеживающей поддержку трассировки), может быть большой для этого типа вещи. Это очень дорого все же.

0
ответ дан 18 December 2019 в 08:33
поделиться

Идея использования программного обеспечения UART с побитовыми битами хороша, но для ее написания требуются определенные усилия, а также вам нужны свободные таймеры и прерывания. Если ваше оборудование имеет какой-либо другой неиспользуемый последовательный интерфейс (SPI, I2C, ...), их будет проще использовать. С небольшим микроконтроллером вы можете преобразовать интерфейс в RS-232.

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

0
ответ дан 18 December 2019 в 08:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: