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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Прерывания

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

Little Endian против Big Endian

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

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

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

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