1. Встроенные продукты: Встроенныйпродуктсуществовать Запуск процессасередина, Часто случаются различные поломки, крушение и т. д., Когда что-то идет не так просто нужен одинМеханизм перезапуска исправления ошибок, сторожевой песто есть Как справиться с этими проблемамииз ;
3.основнойэффект : существовать После сбоя и сбоя системы перезапустите систему.;
(2) Метод работы сторожевого таймера
сторожевой пес метод работы :
1. Реализовать функцию таймера : сторожевой пес дасуществовать Аппаратный модульначальство Реализован таймер, Долженвремяустройство После запуска отсчет времени необходимо перезапустить в указанное время.;
2. Кормите собаку: кормить собаку действовать то есть Пересчитать из Изображение из заголовка;
3. Механизм перезапуска: еслисуществовать в установленные сроки, Хронометраж не перезапускается (покормить собаку), Так Должен Аппаратный модуль Воля Если вы считаете, что система зависла, перезапустите ее.;
(3) Стратегия отключения сторожевого таймера при запуске
сторожевой песзание закрытие :
1.сторожевой цикл негативных эффектов : сторожевой песосновнойдасуществовать Linux Когда ядро работает, Операционная система взять на себя ответственность время Перезапусксторожевой песвремяустройство ( кормить собаку ) ;
2.Запускается загрузчик: существовать BootLoader гид запускатьчас, в это время Операционная системабезиметьбегать, Нужно написать дополнительный изкод, чтобы время кормить собаку;
3.запускатьчасзакрытиесторожевой пес : существовать BootLoader гидзапуск, сторожевой собака не обязательно должна быть, закрытие сторожевой пес может избавить от многих неприятностей;
2. Принцип сторожевого таймера
(1) Принцип работы аппаратного модуля сторожевого таймера
сторожевой пес модуль принцип :
1.часыпроизводитьмодуль : PLCK дасторожевой песизка источник, Сначала пройдите 8 Кусочекиз ① прескалер Выполнить прескалерную обработку Сгенерировать соответствующий сторожевой песвремяустройствочасы, Этоценить Более прошел один раз ② Обработка частотного разделения ;
( 1 ) сторожевой песконтрользарегистрироваться :Полное английское имя Watchdog Timer Control Register ( WTCON ) , Должензарегистрироватьсясерединанастраивать ① Значение прескалера и ② Параметры частотного деления;
( 4 ) сторожевой формула расчета песчасов :Источник PCLK, Prescaler value дапрескалерценить, Division_factor — параметр деления частоты. ;
2.считатьмодуль : запускатьсторожевой песвперед ① Дай сначала сторожевой песиз прилавок Установите начальное значение, ② Каждый раз, когда приходит сигнал часов о прибытии Это прилавок Просто уменьшите 1 действовать;
( 1 ) сторожевой песчасыданныезарегистрироваться ( WTDAT ) : Полное английское имя Watchdog Timer Data Register ( аббревиатура WTDAT ), магазин Необходимо снизить израсходованныеизначальныецены ;
(1) Знакомство с регистром управления сторожевыми часами
сторожевой пес часы контроль зарегистрироваться Введение :
1.Полное английское имя :WATCHDOG TIMER CONTROL (WTCON) REGISTER;
2. Основные функции WTCON:① Открыть / закрытие сторожевой пес времяустройство, ② от 4 Выбирайте из разных источников источников часы Сигнал , * ③ Открыть / закрытие Функция прерывания , ④ Открыть / закрытие сторожевой пес Выход таймера* ;
3.сторожевой пес Перезапускдействовать : существует Система вышла из строя после включения,сторожевой пес Может Перезагрузите систему, в то же время ① закрытие генератор прерываний, ② активация сторожевой пес генерироватьсигнал перезапускачасывыход;
4.сторожевой пессчитатьдействовать ( Нет перезапуска ) : если пользователь хочет использовать сторожевой пес изобычносчитать Функция, ① активация генератор прерываний, ② закрытие сторожевой пес генерироватьсигнал перезапускачасывыход;
(2) Подробный анализ параметров регистра управления сторожевым таймером.
Этот блог для 6410 Совет по развитиюписать, Ниже иззарегистрироватьсяадрес, Разные виды из Совет по развитию Всеиметьдругойизадресценить
зарегистрироватьсяадресдругойиз Совет по развитиюдадругойиз
зарегистрироватьсяместо содержанияиметь arm Совет по развитию Все последовательно
сторожевой песвремяустройстводанныезарегистрироваться : Полное английское имя WATCHDOG TIMER DATA (WTDAT) REGISTER ;
1.эффект : Должензарегистрироватьсяиспользуется для обозначениесторожевой песиз считать тайм-аут ;
2.WTCNT тайм-аутнастраивать : WTDAT зарегистрироватьсяизценить не будет автоматически загружен в сторожевой пес времяустройство прилавоксередина ;
3.Первоначальная цена по умолчанию : использовать 0x8000 как таймер по умолчанию тайм-аут,Долженценить да WTCNT зарегистрироватьсяисходныйценить ;
3. Регистр счетчика сторожевого таймера (WTCNT).
сторожевой песвремяустройствосчитатьзарегистрироваться : Полное английское имя WATCHDOG TIMER COUNT (WTCNT) REGISTER ;
1.эффект : Должензарегистрироватьсяиспользуется для хранилище времяустройство изкогдавпередизсчитатьценить;
2.исходныйценитьнастраивать : когдасторожевой пес таймер Когда впервые работал, WTDAT зарегистрироватьсясерединаизценить Не загружается автоматически WTCNT зарегистрироватьсясередина, WTCNT зарегистрироваться существование Необходимо установить перед началом работы начальное значение;
2.определение метки вызова : существовать компиляция кодсерединаопределение этикетка, используется для отметказакрытиесторожевой песизинструкция адрес , использовать bl инструкция Перейти к этому ярлыку, Готов к выполнению закрытиесторожевой песиздействовать, код disable_watchdog : ;
3. будет сторожевой пес контрользарегистрироваться адрес нагрузка приезжать Универсальныйзарегистрироватьсясередина : Воля 0x7E004000 адрес нагрузкаприезжать Универсальныйзарегистрироватьсясередина, для последующего обращения к доступу , код ldr r0, =pWTCON ;
4. будет немедленный номер 0 настраиватьприезжать Универсальныйзарегистрироватьсясередина : Воля немедленный номер 0 настраиватьприезжать Универсальныйзарегистрироваться r1 середина, Должензарегистрироватьсясерединаизценитьдахотетьиспользуется длянаделятьценитьдействоватьизоригинальныйценить, код mov r1, #0x0 ;
5.настраиватьсторожевой песконтрользарегистрироваться :зарегистрироваться r1 серединаизценить житьприезжать r0 зарегистрироватьсяхранилищеизадрес переписываться в памяти, Уведомление Первый против R0 серединаизадресруководитьобращение,Затемсуществоватьнастраивать Долженобращениепозжеценить, код str r1, [r0] ;
(2) Пример ассемблерного кода
компиляциякод Пример :
код Язык:javascript
копировать
@****************************
@File:start.S
@
@BootLoader Инициализировать
@****************************
.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 адресмагазин для выполнения из содержимого
bl set_svc @ Прыжокприезжать set_svc Выполнено на лейбле, настраивать svc рабочий режим
bl disable_watchdog @ Прыжокприезжать disable_watchdog выполнение этикетки, закрытиесторожевой пес
set_svc:
mrs r0, cpsr @ Воля CPSR зарегистрироватьсясерединаизценить Экспорт приезжать R0 зарегистрироватьсясередина bic r0, r0, #0x1f @ Воля R0 зарегистрироватьсясерединаизценить и #0x1f немедленный номер руководитьидействовать, И результаты Воля спасли приезжать R0 зарегистрироватьсясередина, Актуально да Волязарегистрироваться 0 ~ 4 Кусочек набор 0
orr r0, r0, #0xd3 @ Воля R0 зарегистрироватьсясерединаизценить и #0xd3 немедленный номер руководитьилидействовать, И результаты Воля спасли приезжать R0 зарегистрироватьсясередина, Актуальная данарегулировка 0 ~ 4 Кусочек зарегистрироватьсяценить изпроцессоррабочий режимкод
msr cpsr,r0 @ Воля R0 зарегистрироватьсясерединаизценить держатьприезжать CPSR зарегистрироватьсясередина#define pWTCON 0x7e004000 @ определениесторожевой песконтрользарегистрироваться адрес ( 6410Совет по развитию )
disable_watchdog:
ldr r0,=pWTCON @ Первый Воляконтрользарегистрироватьсяадресдержатьприезжать Универсальныйзарегистрироватьсясередина mov r1, #0x0 @ подготовить один 0 ценить,сторожевой песконтрользарегистрироваться Всенастраиватьдля0,Прямо сейчассторожевой пестакжезакрытие Понятно str r1,[r0] @ Воля 0 ценить настраиватьприезжать сторожевой песконтрользарегистрироватьсясередина
2. Указать вход программы из : настраиватькомпилироватьвыходиз Вход в программу Кусочекнабор, Грамматика для ENTRY(Вход Кусочекнабор), существоватьвышеиз Start.S серединанастройка входа в программу да _start, коддля ENTRY(_start) ;
3.настраиватькодчасть : использовать .text : настраиватькодчасть;
4.настраиватьданныечасть : использовать .data : настраиватьданныечасть;
5.настраивать BSS часть : использовать .bss : настраивать BSS часть;
6. Выравнивание: Каждая часть требует настройки памяти из формата выравнивания, использовать . = ALIGN(4); настраивать Четыребайт Выравнивание Прямо сейчас Может;
7.код Пример :
код Язык:javascript
копировать
OUTPUT_ARCH(arm) /*Указываем структуру процессора*/
ENTRY(_start) /*Указать запись программы существовать _start Место маркировки*/
SECTIONS {
. = 0x50008000; /*Ссылка на всю программуизначинать Кусочекнабор,в соответствии с Совет по развитию Конечно, другой Совет по развитиюадреснепоследовательный*/
. = ALIGN(4); /*Выровнять дело с, Перед началом каждой части руководить 4 байтalign*/
.text : /*кодчасть*/
{
start.o (.text) /*start.S Конвертировать в исходную часть*/
*(.text) /*Другая часть кода*/
}
. = ALIGN(4); /*Выровнять дело с, Перед началом каждой части руководить 4 байтalign*/
.data : /*данныечасть*/
{
*(.data)
}
. = ALIGN(4); /*Выровнять дело с, Перед началом каждой части руководить 4 байтalign*/
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