Встраиваемые системы - Условия

Счетчик команд

Счетчик программ - это 16- или 32-разрядный регистр, который содержит адрес следующей команды, которая должна быть выполнена. ПК автоматически увеличивается до следующей последовательной ячейки памяти каждый раз при получении инструкции. Операции ветвления, перехода и прерывания загружают счетчик программ с адресом, отличным от следующего последовательного местоположения.

Активация сброса при включении приведет к потере всех значений в регистре. Это означает, что значение ПК (счетчик программ) при сбросе равно 0, что заставляет ЦП извлечь первый код операции из ячейки памяти ПЗУ 0000. Это означает, что мы должны поместить первый байт кода доступа в ячейку ПЗУ 0000, потому что именно там CPU ожидает найти первую инструкцию

Сбросить вектор

Значение вектора сброса заключается в том, что он указывает процессору на адрес памяти, который содержит первую инструкцию встроенного программного обеспечения. Без вектора сброса процессор не знал бы, с чего начать выполнение. После сброса процессор загружает программный счетчик (ПК) со значением вектора сброса из предопределенной ячейки памяти. На архитектуре CPU08 это находится в расположении $ FFFE: $ FFFF.

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

Указатель стека

Стек реализован в ОЗУ, а регистр ЦП используется для доступа к нему, называемому регистром SP (Stack Pointer). Регистр SP является 8-битным регистром и может адресовать адреса памяти в диапазоне от 00h до FFh. Первоначально регистр SP содержит значение 07, указывающее на местоположение 08 как первое местоположение, используемое для стека 8051.

Когда содержимое регистра ЦП хранится в стеке, это называется операцией PUSH. Когда содержимое стека сохраняется в регистре ЦП, это называется операцией POP. Другими словами, регистр помещается в стек, чтобы сохранить его, и извлекается из стека, чтобы получить его.

Бесконечная петля

Бесконечный цикл или бесконечный цикл можно идентифицировать как последовательность инструкций в компьютерной программе, которая выполняется бесконечно в цикле, по следующим причинам:

  • цикл без завершающего условия.
  • цикл с завершающим условием, которое никогда не может быть выполнено.
  • цикл с завершающим условием, которое заставляет цикл начинаться заново.

Такие бесконечные циклы обычно приводили к тому, что старые операционные системы перестали отвечать на запросы, поскольку бесконечный цикл потребляет все доступное время процессора. Операции ввода / вывода, ожидающие ввода пользователя, также называются «бесконечными циклами». Одной из возможных причин «зависания» компьютера является бесконечный цикл; другие причины включают тупик и нарушения доступа .

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

Прерывания

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

Little Endian против Big Endian

Хотя числа всегда отображаются одинаково, они не сохраняются в памяти одинаково. Машины с прямым порядком байтов хранят самый старший байт данных в самом младшем адресе памяти. Машина Big-Endian хранит 0x12345678 как -

ADD+0: 0x12 
ADD+1: 0x34 
ADD+2: 0x56 
ADD+3: 0x78

Машины Little-Endian, с другой стороны, хранят младший байт данных в младшем адресе памяти. Little-Endian машина хранит 0x12345678 как -

ADD+0: 0x78 
ADD+1: 0x56 
ADD+2: 0x34 
ADD+3: 0x12