Счетчик программ — это 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 хранят самый старший байт данных в младшем адресе памяти. Машина Big-Endian хранит 0x12345678 как —
ADD+0: 0x12 ADD+1: 0x34 ADD+2: 0x56 ADD+3: 0x78
Машины Little-Endian, с другой стороны, хранят младший байт данных в младшем адресе памяти. Little-Endian машина хранит 0x12345678 как —