[Встроенная разработка] Таблица векторов исключений ARM (концепция исключений | Процесс обработки исключений | Вектор исключений | Ассемблерный код)
[Встроенная разработка] Таблица векторов исключений ARM (концепция исключений | Процесс обработки исключений | Вектор исключений | Ассемблерный код)

Загрузите справочные статьи и сопутствующие материалы для этого блога. :

1. Таблица векторов исключений

Справочное руководство :

  • 1.Таблица векторов исключенийруководство Расположение : ARM Architecture Reference Manual A2.6 ;
  • 2. Адрес загрузки документа Справочного руководства по архитектуре ARM. : http://download.csdn.net/detail/han1202012/8324641;

1. Понятия, связанные с аномалиями

(1) Ненормальный


Определение исключения :

  • 1. Ненормальное введение : потому что некоторые внутренние или внешние события , привести к Процессор останавливает то, что он делает, и вместо этого обрабатывает то, что произошло.;
  • 2. Статус процессора : когда встретилисьприезжатьаномальныйкогда, Первый ВоляСостояние процессора сохраняется,так чтоосуществлятьнад Обработка исключенийпосле процедуры, МожетВосстановите состояние процессора и продолжите выполнение кода ниже точки, в которой произошло исключение.;
  • 3. Отклонения возникают одновременно : существоватьВ один момент времени может возникнуть несколько исключений;
  • 4. Концепция вектора исключений : Когда возникает исключение, Программа принудительно выполняется с фиксированного адреса памяти. Каждому типу аномальных объектов соответствует фиксированный адрес в памяти., Этот адрес памяти является вектором исключений. ;

(2) Знакомство с типами исключений


Тип исключения : ARM Архитектура поддерживать Семь типов исключений,

  • 1.Reset : Когда процессор работает, Внезапный Нажатие кнопки перезагрузки вызовет это исключение;
  • 2.Undefined instructions : иметь дело сустройствоНевозможно распознать исключение команды, Инструкции, выполняемые процессором, стандартизированы. если попытаться выполнить Инструкции, не соответствующие требованиям, Он введет адрес, соответствующий аномальной команде;
  • 3.Software interrupt (SWI) : мягкое прерывание, Программному обеспечению необходимо прервать работу процессора,Можетиспользоватьмягкое прерывание Приходитьосуществлять ;
  • 4.Prefetch Abort (instruction fetch memory abort) : Инструкция предварительной выборки не удалась, ARM Во время выполнения поручений Сначала необходимо выполнить предварительную выборку инструкций, чтобы подготовиться к выполнению. если Инструкция предварительной выборки не удалась, произведет аномальное;
  • 5.Data Abort (data access memory abort) : Не удалось прочитать данные;
  • 6.IRQ (interrupt) : Обычное прерывание;
  • 7.FIQ (fast interrupt) : быстрое прерывание, быстрое прерывание Чем Обычное Скорость срабатывания прерывания выше;

2. Обработка исключений

(1) Ненормальныйиметь дело с


Обработка исключений Введение :

  • 1. Механизм работы вектора исключений : При возникновении аномалии ARM иметь дело сустройствовстречаПерейти к соответствующему исключению фиксированный адрес идтиосуществлять Обработка исключенийпрограмма, этот фиксированный адрес то естьаномальныйвектор;
  • 2. Адрес по умолчанию и верхний адрес : Каждому типу прерывания соответствует два аномальных вектора, Значение по умолчанию: Normal address, если после настройки Конфигурацияиспользоватьвысокое положениеаномальныйвектор, буду использовать High vector address аномальныйвектор; Использовать ли обычные векторы или векторы с высоким разрядом можно настроить с помощью сопроцессора CP15.;
  • 3. Однозначное соответствие между исключениями и адресами : каждыйаномальный Всесоответствует адресу, При появлении указанного типа аномалий Он перейдет на адресосуществлять, соответствующий аномальному Обработка исключенийпрограмма;
  • 4. Обратите внимание на точки останова вектора исключений (зарезервированные биты). : Обычный векторный адрес 0x00000014 и Адрес старшего вектора (High Vector) 0xFFFF0014 В настоящее время нет использования, Зарезервировано для будущего расширения;

2. Написание кода таблицы векторов исключений

1. Инициализация кода модуля таблицы векторов исключений.


Start.S Ассемблерный анализ :

  • 1. Собрать справочные статьи: https://blog.csdn.net/shulianghan/article/details/42408137 ;
  • 2.компиляция Справочное руководствоскачатьадрес : https://download.csdn.net/download/han1202012/8328375
  • 3. Укажите сегмент ассемблерного кода: использовать .text Макрос указатьассемблерный кодчасть;
  • 4. Укажите номер записи программы: Первыйиспользовать .global _start Объявите _start как глобальный символ.; использовать _start: Метка записи, указывающая программу, — _start.;
  • 5. Определите метки (аналогично именам функций): Определить пользовательские метки, Формат этикетка:, Например irq:;
    • (1) Определите инструкции для выполнения метки: Инструкции, которые необходимо выполнить, указаны под меткой., Если вы хотите выполнить инструкцию под меткой, просто перейдите к соответствующей метке.;
    • (2) Содержимое кода выполняется ненормально: В коде ниже 27 ~ 49 ОК, чтобы естьОпределяет 7 меток для ненормальных операций выполнения. и инструкции, которые необходимо выполнить nop; Эти ВседаКод для обработки при возникновении исключения;
    • (3) Пример кода : Следующий код определяет irq этикетка, Перейдите к метке и начните выполнение кода под ней. nop, irq : nop;
  • 6.Нет операции: еслисуществоватькто-то Расположениеосуществлятьинструкция, Не хочу делать никаких операций, Можетиспользовать nop выражать Никакая операция не выполняется;
  • 7. Определите метки (аналогично переменным) : определениеодинэтикетка, хранится в этикетке 32 битовое значение, определение Формат этикетка: .word хранит содержимое значения;
    • (1) Пример: _irq: .word irq, определение _irq этикетка, .word выражать Этикетка магазинов - это 32 место значения, этот Размер значениято есть irq адрес;
  • 8. Инструкции филиала: Когда возникает исключение, Нужно перейти к Обработке, соответствующей месту проживания. исключенийинструкциясередина;
    • (1) Формат синтаксиса инструкции перехода: б{условие} адрес, если①Если условия выполнены, перейдите к указанному адресу., если②Если условие не выполнено, выполните следующую инструкцию., ③Если условий нет, оно будет выполнено на 100%.;
    • (2) Пример кода : b reset, При возникновении аномалии Перейти непосредственно к reset этикеткавосуществлятькод;
  • 9. Инструкции по загрузке:
    • (1) Формат синтаксиса инструкции загрузки : ldr зарегистрироваться, адрес, Воля адрес данные, хранящиеся в нагрузка приезжать в реестре;
    • (2) Пример кода :
      • а. Определите метки (функции) : Метка, определяющая выполняемую инструкцию. irq , Прямо Теперь перейдите к метке. Просто начните с следующих инструкций, irq : nop ;
      • б. Определить метку (переменную): определениеодинэтикетка _irq , используется дляХранит 32-битное значение,Это используется для хранения выше определениеизэтикетка адрес, _irq .word irq
      • c. Загрузите адрес в регистр ПК: ldr pc, _irq, Воля _irq Значение, хранящееся в этикетке, это значение irq этикеткаизадрес, то естьПерейдите по этому адресу, чтобы выполнить инструкцию;
  • 10. Пример полной компиляции кода :
Язык кода:javascript
копировать
@****************************  
@File:start.S  
@  
@Обработка исключенийрамка  
@****************************  

.text                                   @ Макрос Укажите часть кода  
.global _start                          @ Директива объявляет глобальный стартовый символ  
_start:                                 @ Знак входа в программу  
        b   reset                       @ reset сложный Кусочеканомальный  
        ldr pc,_undefined_instruction  @ еще нетопределениеаномальный, Воля _undefined_instruction ценитьнагрузкаприезжать pc в указателе  
        ldr pc, _software_interrupt     @ мягкое прерываниеаномальный  
        ldr pc,_prefetch_abort         @ предварительная выборкаинструкцияаномальный  
        ldr pc, _data_abort             @ Чтение данных аномальное  
        ldr pc, _not_used               @ занимать 0x00000014 адрес                            
        ldr pc, _irq                    @ Обычное прерываниеаномальный  
        ldr pc, _fiq                    @ мягкое прерываниеаномальный  

_undefined_instruction: .word undefined_instruction @ _undefined_instruction этикетка хранит ценность, Значение 32 Кусочекадрес undefined_instruction, undefined_instruction это адрес  
_software_interrupt:    .word software_interrupt    @ мягкое прерываниеаномальный  
_prefetch_abort:    .word prefetch_abort            @ предварительная выборкаинструкцияаномальный иметь дело с  
_data_abort:        .word data_abort                @ Чтение данных аномальное  
_not_used:      .word not_used                      @ нулевой Кусочекиметь дело с  
_irq:           .word irq                           @ Обычное прерываниеиметь дело с  
_fiq:           .word fiq                           @ быстрое прерываниеиметь дело с  

undefined_instruction:                              @ undefined_instruction адрес хранит контент, который вы хотите изучить  
        nop  

software_interrupt:                                 @ software_interrupt адрес хранит контент, который вы хотите изучить  
        nop  

prefetch_abort:                                     @ prefetch_abort адрес хранит контент, который вы хотите изучить  
        nop  

data_abort:                                         @ data_abort адрес хранит контент, который вы хотите изучить  
        nop  

not_used:                                           @ not_used адрес хранит контент, который вы хотите изучить  
        nop  

irq:                                                @ irq адрес хранит контент, который вы хотите изучить  
        nop  

fiq:                                                @ fiq адрес хранит контент, который вы хотите изучить  
        nop  

reset:                                              @ reset адрес хранит контент, который вы хотите изучить  
        nop  

2. Скрипт компоновщика


gboot.lds скрипт компоновщика Анализ кода :

  • 1. Укажите выходной формат ( иметь дело сустройство Архитектура ) : использовать OUTPUT_ARCH(Архитектураимя) указатьвыходной формат, Прямо сейчасиметь дело сустройствоиз Архитектура,вот arm Архитектураиз, OUTPUT_ARCH(arm) ;
  • 2. Укажите точку входа выходной программы: настраиватькомпилироватьвыходизпрограмма Вход Расположение, Синтаксис: ENTRY(Вход Расположение), в выше Start.S Установленная запись программы _start, Код ENTRY(_start) ;
  • 3. Настройте фрагмент кода: использовать .text : Установить фрагмент кода;
  • 4. Установите сегмент данных: использовать .data : Установить сегмент данных;
  • 5. Установите сегмент BSS: использовать .bss : настраивать BSS часть;
    • (1) Запишите начальный адрес сегмента BSS: bss_start = .; ;
    • (2) Запишите конечный адрес сегмента BSS: bss_end = .; ;
  • 6. Выравнивание: Каждая часть требует настройки памяти, выравнивания Формат, использовать . = ALIGN(4); настройки четырехбайтовое выравнивание Прямой сейчас Может;
  • 7.пример кода :
Язык кода:javascript
копировать
OUTPUT_ARCH(arm)        /*указатьиметь дело сустройствоструктура*/  
ENTRY(_start)           /*Указать запись программы существовать _start этикеткав*/  
SECTIONS {                
    . = 0x50008000;     /*Отправная точка всей ссылки программы Расположение, Определяется по данным совета по развитию, Адреса на разных макетах несовместимы */  

    . = ALIGN(4);       /*Выровнять дело с, Выполняется перед началом каждой части 4 Выравнивание байтов */  
    .text :             /*кодчасть*/  
    {  
    start.o (.text)     /*start.S Преобразованная часть кода*/  
    *(.text)            /*Другие коды*/  
    }  

    . = ALIGN(4);       /*Выровнять дело с, Выполняется перед началом каждой части 4 Выравнивание байтов */  
    .data :             /*данныечасть*/  
    {  
    *(.data)  
    }  

    . = ALIGN(4);       /*Выровнять дело с, Выполняется перед началом каждой части 4 Выравнивание байтов */  
    bss_start = .;      /*Записывать bss частьначинать Расположение*/  
    .bss :              /*bss часть*/  
    {  
    *(.bss)   
    }  
    bss_end = .;        /*Записывать bss часть Заканчивать Расположение*/  
} 

3. Скрипт компиляции Makefile


makefile Написание документов :

  • 1. Общие правила (правила составления файла сборки): Файл сборки компилируется в файл .o с тем же именем., документ имеет то же имя, Различные суффиксы, %.o : %.S, Производственный процесс arm-linux-gcc -g -c $^ , в ^ Идентичность — это документ всех зависимостей, по этому правилу start.S будет мутировать в start.o ;
  • 2. Общие правила (правила компиляции C-файла): C кодкомпилироватьодноименный .o документ, %.o : %.c , Производственный процесс arm-linux-gcc -g -c $^ ;
  • 3.настройка конечной цели : использовать all: настраиватьфинальныйкомпилировать Цель; ( 1 ) полагатьсядокумент : Для достижения конечной цели требуются зависимости start.o документ, использовать all: start.o выразить Конечная цель зависит от этого документа; ( 2 ) процесс связи : arm-linux-ld -Tgboot.lds -o gboot.elf ^, нуждатьсяиспользоватьскрипт компоновщика для подключения, ①Инструмент ссылки arm-linux-ld инструмент, ②Использование -Tgboot.lds настраиватьскрипт компоновщика Я только что написал это gboot.lds скрипт компоновщика, ③Выходной документ gboot.elf Это средний документ, ④ Документ зависимости ^ Представляет все зависимости; ( 3 ) Преобразовать в изучаемый двоичный документ : arm-linux-objcopy -O binary gboot.elf gboot.bin, использовать -O binary настройка вывода бинарного документа, Документ зависимости gboot.elf, На выходе можно получить двоичный документ Прямо сейчас оказаться gboot.bin ;
  • 4.Содержимое файла makefile:
Язык кода:javascript
копировать
all: start.o #зависит от start.o  
    arm-linux-ld -Tgboot.lds -o gboot.elf $^    #использоватьскрипт компоновщика, Воля start.o конвертировать в gboot.elf  
    arm-linux-objcopy -O binary gboot.elf gboot.bin #Воля gboot.elf преобразован в Можетпрямойсуществоватьна доскеосуществлятьиз gboot.bin документ  

%.o : %.S   #общие правила, нравиться start.o сделан из start.S компилировать Приходитьиз, -c только компилировать, не связано  
    arm-linux-gcc -g -c $^  

%.o : %.c   #общие правила, нравиться start.o сделан из start.c компилировать Приходитьиз, -c только компилировать, не связано  
    arm-linux-gcc -g -c $^  

.PHONY: clean     
clean:              #clearкомпилировать информацию  
    rm *.o *.elf *.bin  

4. Скомпилируйте и выведите исполняемый файл.


Процесс компиляции :

  • 1. Подготовка документов : Воля ассемблерный код ( start.S ) скрипт компоновщика ( gboot.lds ) makefile документ Скопировать в каталог компиляции ;
  • 2. Выполните команду компиляции: make ;
  • 3. Результаты компиляции: Вы можете посмотреть приезжать Сгенерировано компилировать Цельдокумент start.o,Связьдокумент gboot.elf,изучить бинарный документ gboot.bin;

Загрузите справочные статьи и сопутствующие материалы для этого блога. :

boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.
boy illustration
Nomic Embed: воспроизводимая модель внедрения SOTA с открытым исходным кодом.
boy illustration
Улучшение YOLOv8: EMA основана на эффективном многомасштабном внимании, основанном на межпространственном обучении, и эффект лучше, чем у ECA, CBAM и CA. Малые цели имеют очевидные преимущества | ICASSP2023
boy illustration
Урок 1 серии Libtorch: Тензорная библиотека Silky C++
boy illustration
Руководство по локальному развертыванию Stable Diffusion: подробные шаги и анализ распространенных проблем
boy illustration
Полностью автоматический инструмент для работы с видео в один клик: VideoLingo
boy illustration
Улучшения оптимизации RT-DETR: облегченные улучшения магистрали | Support Paddle облегченный rtdetr-r18, rtdetr-r34, rtdetr-r50, rtdet
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | Деформируемое внимание с большим ядром (D-LKA Attention), большое ядро ​​​​свертки улучшает механизм внимания восприимчивых полей с различными функциями
boy illustration
Создано Datawhale: выпущено «Руководство по тонкой настройке развертывания большой модели GLM-4»!
boy illustration
7B превышает десятки миллиардов, aiXcoder-7B с открытым исходным кодом Пекинского университета — это самая мощная модель большого кода, лучший выбор для корпоративного развертывания.
boy illustration
Используйте модель Huggingface, чтобы заменить интерфейс внедрения OpenAI в китайской среде.
boy illustration
Оригинальные улучшения YOLOv8: несколько новых улучшений | Сохранение исходной информации — алгоритм отделяемой по глубине свертки (MDSConv) |
boy illustration
Второй пилот облачной разработки | Быстро поиграйте со средствами разработки на базе искусственного интеллекта
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция с нулевым кодированием и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
Решенная Ошибка | Загрузка PyTorch медленная: TimeoutError: [Errno 110] При загрузке факела истекло время ожидания — Cat Head Tiger
boy illustration
Brother OCR, библиотека с открытым исходным кодом для Python, которая распознает коды проверки.
boy illustration
Новейшее подробное руководство по загрузке и использованию последней демонстрационной версии набора данных COCO.
boy illustration
Выпущен отчет о крупной модели финансовой отрасли за 2023 год | Полный текст включен в загрузку |
boy illustration
Обычные компьютеры также могут работать с большими моделями, и вы можете получить личного помощника с искусственным интеллектом за три шага | Руководство для начинающих по локальному развертыванию LLaMA-3
boy illustration
Одной статьи достаточно для анализа фактора транскрипции SCENIC на Python (4)
boy illustration
Бросая вызов ограничениям производительности небольших видеокарт, он научит вас запускать большие модели глубокого обучения с ограниченными ресурсами, а также предоставит полное руководство по оценке и эффективному использованию памяти графического процессора!
boy illustration
Команда Fudan NLP опубликовала 80-страничный обзор крупномасштабных модельных агентов, в котором в одной статье представлен обзор текущего состояния и будущего агентов ИИ.
boy illustration
[Эксклюзив] Вы должны знать о новой функции JetBrains 2024.1 «Полнострочное завершение кода», чтобы решить вашу путаницу!
boy illustration
Краткое изложение базовых знаний о регистрации изображений 1.0
boy illustration
Новейшее подробное руководство по установке и использованию библиотеки cv2 (OpenCV, opencv-python) в Python.
boy illustration
Легко создайте локальную базу знаний для крупных моделей на основе Ollama+AnythingLLM.
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание решения. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Одна статья поможет вам понять RAG (Retrival Enhanced Generation) | Введение в концепцию и теорию + практику работы с кодом (включая исходный код).
boy illustration
Эволюция архитектуры шлюза облачной разработки
boy illustration
Docker и Kubernetes [Разработка контейнерных приложений с помощью Python]