[Встроенная разработка] Светодиодный драйвер (принцип светодиодных светодиодов | Анализ схемы основной платы | Анализ схемы основной платы | GPIO | Процесс программирования голой платы)
[Встроенная разработка] Светодиодный драйвер (принцип светодиодных светодиодов | Анализ схемы основной платы | Анализ схемы основной платы | GPIO | Процесс программирования голой платы)

Совет по развитию из LED лампа эффект : Встроенныйпрограммное обеспечениеизразвиватьисходный, нравиться развивать BootLoader код или Kernel Код ядра В ходе процесса иметь предел эффективности метода отладки, Обычно в это время используется Совет по развитиюначальствоиз LED лампа как программаотлаживатьизрукачасть ; В дополнение к LED лампа снаружи Дело не в том, что нет методов отладки, JLink Отладчик может выполнять этот уровень отладки. ;

После этого я начал общаться с открытием в изблоге. Периферия аппаратное обеспечениеиздействовать, Аппаратная периферия включает в себя последовательный порт, Flash, SD-карта, сетевая карта ждать; LED да Самый простой из Периферийное оборудование; Периферияаппаратное обеспечениеводить Процесс проектирования программы машины : ① Схема анализа ② Анализ чтения руководство по чипу, ③ управляемый дизайн, ④ Написано кодом ;

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

один. LED Введение 1. LED Принципиальная схема (1) LED опорная плита Принципиальная схема


LED опорная плита Принципиальная схема Анализ :

  • 1.Принцип светодиодного освещения: LED Это светодиод, Разность напряжений на диоде достигает порога ценить, будет в проводящем состоянии, Это сияющее состояние;
  • 2.OK6410 LED опорная анализ схемы плиты : к первый LED1 дляпример, Правая сторона высокая уровень, Левый даницкий уровень, Когда разница напряжений достигает определенного уровня LED будет в проводящем состоянии,низкий уровеньконецприколотьда NLED1 ;

###(2) LED основная плата Принципиальная схема


LED основная плата Принципиальная схема :

  • 1.OK6410 основная плата Принципиальная схема Анализ : Изображение ниже основная плата Принципиальная схемаз частичный скриншот, можно увидеть NLED1 подобрать CPU GPIO из GPM0 приколотьначальство, Поэтому его можно эксплуатировать GPIO из GPM0 приколоть выполнятьнастраивать NLED1 приколотьизнизкий уровеньдействовать;

##2. GPIO

###( 1 ) GPIO Введение


GPIO Введение : Полное английское имя General-Purpose Input / Output Ports, Китайский перевод : Порты ввода и вывода общего назначения;

  • 1.GPIO эффект : Множество внешних устройств с простой структурой или схема Требуются только два состояния : открыть или закрывать, GPIO порт только для передачи выключатель Сигнал, CPU проходить GPIO порт Приходитьдействоватьэтот Что-то простоеоборудование;
  • 2. Последовательный порт и USB эффект : Используется для передачи сложных данных, Так просто выключатель использовать GPIO Сравнивать подходящий;
  • 3.LED сцена с лампой : здесьпроходитьдействовать GPIO из GPM0 приколоть,Приди и отдай LED лампаодинчастьдобавлятьнизкий уровень,Просто нужно добавлять или Нетдобавлять Две операции;
  • 4. Использование GPIO: каждый GPIO для использования порта требуется как минимум две регистрации, ① контрользарегистрироваться выбиратьпортиз ввод/вывод действовать, ② данныезарегистрироваться Используется для хранения данных;

###(2) Документация по GPIO

Справочное руководство : ARM-чип руководство S3C6410X.pdf ( на основе 6410 Совет по развитию ARM 11 )


Документация GPIO:

  • 1. Описание контакта GPIO: S3C6410 иметь 187 вход и выход приколоть, принадлежит 17 порт; виз LED1 Просто принадлежи GPM0;
  • 2.GPM контрользарегистрироваться : GPM контрользарегистрироватьсяточкадля 4 Кусочек, в LED1 Соединение изприколотьдля GPM0, GPM0 приколоть Соответствует изконтрользарегистрироваться [3 : 0] Кусочек,настраивать 0b0000 Прямо сейчас настраиватьдлявходитьданные, настраивать 0b0001 Прямо сейчаснастраиватьдлявыходданные;
  • 3.GPM данныезарегистрироваться : GPM данныезарегистрироваться иметь 6 Кусочек [5 : 0], настраивать Нет. 0 Кусочек данные,когдапортодеялонастраиватьдля ввод/вывод Функция, Чтонастраиватьиз 0 или 1 Данные находятся в уже существующем состоянии ;

###( 3 ) зажечься LED лампа


зажечься LED лампа :

  • 1.пол Принципиальная схема Анализ : четыре LED лампаизнизкий уровень, соответственно NLED1, NLED2, NLED3, NLED4 четыреприколотьконтроль;
  • 2.основная плата Принципиальная схема : NLED1, NLED2, NLED3,NLED4 четыреприколотьточка Неподобрать Понятно GPIO портиз GPM0, GPM1, GPM2, GPM3 четыреприколотьначальство;
  • 3.настраивать GPIO контрользарегистрироваться : настраивать GPM0, GPM1, GPM2, GPM3 Переписка контрользарегистрироваться ;
  • 4.настраивать GPIO данныезарегистрироваться : настраивать GPM0, GPM1, GPM2, GPM3 Переписка данныезарегистрироваться ; в настраивать 0 для низкий уровень, настраивать 1 для высокий уровень, делать LED лампа загорается, Долженприколотьнуждатьсянастраивать низкий уровень достигать Порог разницы напряжений светодиодовценить, LED загораться;

##3. Инициализация базового адреса периферийного устройства.

###( 1 ) C15 зарегистрироваться Введение


C15 зарегистрироваться : Полное английское имя Peripheral Port Memory Remap Register, Карта памяти периферийных портов зарегистрироваться ;

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

###( 2 )Карта памяти периферийных портов зарегистрироваться свойство


Карта памяти периферийных портов зарегистрироваться свойство :

  • 1.зарегистрироватьсякомпилировать Число : Должензарегистрироватьсяда CP15 сопроцессорсерединаиз C15 зарегистрироваться;
  • 2.зарегистрироватьсясвойство : Должензарегистрироватьсядаодининдивидуальный 32 Кусочек из Может Читай и пишизарегистрироваться;
  • 3.Права доступа: Доступно только в привилегированном режиме ;

#два. LED контроль Написано кодом

##1. Сборник Написано кодом ###(1) контроль LED выключатель


LED контроль Сборник Написано кодом : на основе OK6410 Совет по развитию; 1 ~ 3 Шаги подготовка данных, 4 ~ 6 Шаги настраивать GPIO из GPM контрользарегистрироватьсяценить,Воляприколотьнастраиватьдлявыход Функция, 7 ~ 9 шаг для настраивать GPIO из GPM данныезарегистрироватьсяценить ;

  • 1. Определение GPM контрользарегистрироватьсяадреспостоянный : GPM контрользарегистрироватьсяиз Адресда 0x7F008820, #define GPBCON 0x7F008820, Изображение ниже S3C6410X.pdf документсередина 10-GPIO Page 338 представлять;
  • 2. Определение GPM данныезарегистрироватьсяадреспостоянный : GPM контрользарегистрироватьсяиз Адресда 0x7F008824, #define GPBDAT 0x7F008824, Картинка выше S3C6410X.pdf документсередина 10-GPIO Page 338 представлять;
  • 3. Определите метку работы светодиода: light_led :, Можетксуществовать Чтоэто Кусочекнаборпроходить перейти к Выполнено на этом лейбле LED лампабитьоткрытьиздействовать;
  • 4.нагрузкаконтрользарегистрироватьсяадрес : первый Воля GPM контрользарегистрироватьсяадресзагрузить в r0 середина, ÌУдобно получить доступ к этому адресу позже, ldr r0, =GPBCON , в Воля 0x7F008820 Адрес загружен. r0 зарегистрироватьсясередина, GPBCON да Извпередопределениеиз GPM проверить адрес устройства из постоянного ;
  • 5. Расчет GPM контрользарегистрироватьсяценить : Изображение ниже GPM контрользарегистрироватьсяизценить, 4 LED лампасоответственно GPM0, GPM1, GPM2, GPM3 контроль, Поэтому необходимо **Воля GPM0, GPM1, GPM2, GPM3 Перепискаконтрольустройствонастраиватьстановитьсявыходмодель**,Каждыйодин Кусочекнастраиватьзанимать 4 Кусочек,Прямо сейчаснастраиватьстановиться 0x1 Прямо сейчас Может,вперед 0 ~ 15 Кусочек настраиватьстановиться 0x1111, GPM4 и GPM5 из Содержимое не требуется, Поэтому настройки становятся 0 Прямо сейчас Может, наконец Должензарегистрироватьсяизценитьнастраиватьстановиться 0x1111 Прямо сейчас Может; коддля ldr r1, =0x1111 ;
  • 6. будет ценить Официально хранится в GPM контрользарегистрироватьсясередина : использовать str инструкция, Воля r1 серединаизценить хранить в GPM контрользарегистрироватьсясередина, коддля str r1, [r0], Интерпретация : Воля r1 серединаизценить хранить в r0 Укажите адрес в памяти ;

Оно еще не завершено,нравитьсяфрукты Вспышка Долженпрограмма, Будет невозможность зажечься LED лариз ситуация, OK6410 Совет по развитие также требует инициализации базового адреса периферийного устройствашаг;


###(2) Инициализация базового адреса периферийного порта

Справочное руководство : Ядро ARM руководство Arm1176jzfs.pdf ( на основе OK6410 Совет по развитию ARM 11 )

  • 1.руководствопереписыватьсяглава : ***3 глава ***;
  • 2.S3C6410X.pdfруководствоскачатьадрес :

Инициализация базового адреса периферийного порта шаг :

  • 1.C15 зарегистрироваться ( Карта памяти периферийных портов зарегистрироваться ) Введение : контроль Базовый адрес периферии иззарегистрироватьсяизда C15 зарегистрироваться;
  • 2.настройка этикетки модуля сборки : настройка этикетки, Удобен для ассемблерных переходов, код set_serial_port : ;
  • 3. Загрузите базовый адрес в r0 зарегистрироватьсясередина : Находить OK6410 Совет по развитиюиз Периферийный базовый адрес, существовать S3C6410X.pdf Поиск в документе, базаадресценитьдля 0x70000000 ; использовать ldr r0, =0x70000000 Заявление о базовом адресе Воля ценить 0x70000000 стоять Прямо сейчасчислоценить загрузить в r0 зарегистрироватьсясередина;
    • ① Грамматический анализ: различать ldr r0, =0x70000000 и ldr r0, 0x70000000 заявление, вперед ВОЗда Воля стоять Прямо сейчасчисло 0x7000000 загрузить в r0 зарегистрироватьсясередина, Последняяда Воля число 0x70000000 из Адрес загрузить в r0 зарегистрироватьсясередина;
  • 4.настраивать Карта памяти периферийных портов зарегистрироваться ценить : Изображение нижеизвыпендриватьсяда Должензарегистрироватьсянастраивать Кусочекиллюстрировать, мы хотим инициализировать 256M Память,[4:0] Кусочек настраиватьстановиться 0b10011, Прямо сейчас 0x13, весьзарегистрироватьсяизценитьотвечать Долженда 0x70000000 и 0x13 осуществлять идействовать, коддля orr r0, r0, #0x13;
  • 5. будет r0 зарегистрироватьсясерединаизценитьперешел к C15 сопроцессор : Согласно картинке ниже c15 сопроцессор из CRn Op1 CRm Op2 , использовать mcr инструкция, Воля r0 ценить перейти к c15 зарегистрироваться; Приговор для mcr p15, 0, r0, c15, c2, 4 ;
    • ① Описание грамматики: MCR p,o,Rd,CRN,CRM,q Воля rd зарегистрироватьсяценить перешел к CRN сопроцессор,
  • 6.Прыжокизменять Вернуться к оригиналуиз Кусочекнабор : mov pc, lr , На этой метке выполнение кода завершается, Перейдите к точке обратного вызова и продолжите выполнение следующего содержимого;
  • 7. Общий код:
код Язык:javascript
копировать
set_serial_port : 
	ldr r0, =0x70000000								@ Волябазаадресзагрузить в r0 зарегистрироватьсясередина, Базовый адрес существовать arm ядерный Определение в руководстве
	orr r0, r0, #0x13								@ настройка базового адреса инициализации из диапазона, Воля r0 серединаизценить и 0x13 стоять Прямо сейчасчисло осуществлять или действовать, Результаты воли сохраняются в r0 середина
	mcr p15, 0, r0, c15, c2, 4						@ Воля r0 серединаизценитьнастраивать Давать c15 сопроцессор 
	mov pc, lr

###(3) Полный код компиляции


Полный код компиляции : Подробная версия аннотации ;

код Язык: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 Выполнить на лейбле
		bl set_serial_port							@ настраиватьпериферийные устройствабазаадреспортинициализация
		bl disable_watchdog                         @ перейти к disable_watchdog выполнение этикетки, Отключить сторожевой таймер
		bl disable_interrupt						@ перейти к disable_interrupt выполнение этикетки, закрытиесерединаперерыв
		bl disable_mmu								@ перейти к disable_mmu выполнение этикетки, закрытие MMU 
		bl light_led								@ битьоткрыть Совет по развитиюначальствоиз LED светоизлучающий диод

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 зарегистрироватьсясередина
		mov pc, lr									@ Вернуться в точка возврата Продолжайте выполнять следующий исход
		
#define pWTCON 0x7e004000                           @ Определение Watchdog контрользарегистрироваться адрес ( 6410Совет по развитию )
disable_watchdog:                                 
		ldr r0, =pWTCON                             @ Первый Воляконтрользарегистрироватьсяадрессохранить в Универсальныйзарегистрироватьсясередина
		mov r1, #0x0                                @ подготовить один 0 ценить,сторожевой песконтрользарегистрироваться Всенастраиватьдля0, Прямо сейчассторожевой пестакжезакрытие Понятно
		str r1, [r0]                                @ Воля 0 ценить настраиватьприезжать сторожевой песконтрользарегистрироватьсясередина 
		mov pc, lr									@ Вернуться в точка возврата Продолжайте выполнять следующий исход
		
disable_interrupt:
	mvn r1,#0x0										@ Воля 0x0 в соответствии с Кусочекотрицать, получать Полный 1 изданные, настраиватьприезжать R1 зарегистрироватьсясередина
	ldr r0,=0x71200014								@ настраиватьпервыйсерединаперерывщитзарегистрироваться, Первый Воля зарегистрироваться адресзагрузить в Универсальныйзарегистрироваться R0 середина 
	str r1,[r0]										@ Снова Воля Полный 1 оценитьнастройки зарегистрироватьсясередина, Должензарегистрироватьсяиз Памятьадресужезагрузить в R0 Универсальныйзарегистрироватьсясередина

	ldr r0,=0x71300014								@ настраивать Нет.двасерединаперерывщитзарегистрироваться, Первый Воля зарегистрироваться адресзагрузить в Универсальныйзарегистрироваться R0 середина 
	str r1,[r0]										@ Снова Воля Полный 1 оценитьнастройки зарегистрироватьсясередина, Должензарегистрироватьсяиз Памятьадресужезагрузить в R0 Универсальныйзарегистрироватьсясередина
	mov pc, lr										@ Вернуться в точка возврата Продолжайте выполнять следующий исход
	
disable_mmu : 
	mcr p15,0,r0,c7,c7,0							@ настраивать I-Cache и D-Cache Неверный
	mrc p15,0,r0,c1,c0,0							@ Воля c1 зарегистрироватьсясерединаизценить читать R0 Универсальныйзарегистрироватьсясередина
	bic r0, r0,#0x00000007							@ использовать bic Кусочек Прозрачныйинструкция, Воля R0 зарегистрироватьсясерединаиз Нет. 0, 1,2 три Кусочек настраиватьстановиться0, представлять закрытие MMU и D-Cache
	mcr p15,0,r0,c1,c0,0							@ Воля R0 зарегистрироватьсясерединаизценитьнапиши ответприезжать C1 зарегистрироватьсясередина
	mov pc, lr										@ Вернуться в точка возврата Продолжайте выполнять следующий исход
	
set_serial_port : 
	ldr r0, =0x70000000								@ Волябазаадресзагрузить в r0 зарегистрироватьсясередина, Базовый адрес существовать arm ядерный Определение в руководстве
	orr r0, r0, #0x13								@ настройка базового адреса инициализации из диапазона, Воля r0 серединаизценить и 0x13 стоять Прямо сейчасчисло осуществлять или действовать, Результаты воли сохраняются в r0 середина
	mcr p15, 0, r0, c15, c2, 4						@ Воля r0 серединаизценитьнастраивать Давать c15 сопроцессор 
	mov pc, lr
	
#define GPBCON 0x7F008820
#define GPBDAT 0x7F008824
light_led : 
	ldr r0, =GPBCON								    @ Воля 0x7F008820 GPM контрользарегистрироватьсяиз Адрес 0x7F008820 загрузить в r0 зарегистрироватьсясередина
	ldr r1, =0x1111								 	@ настраивать GPM контрользарегистрироватьсяиз ХОРОШОдля для Output выход,Прямо сейчаскаждыйпереписыватьсяприколотьизнастраиватьдля 0b0001 ценить
	str r1, [r0]									@ Воля r1 серединаизценить хранить в r0 указать на GPBCON 0x7F008820 адресиз Памятьсередина
	
	ldr r0, =GPBDAT									@ Воля GPBDAT 0x7F008824 адресценить загрузить в r0 зарегистрироватьсясередина
	ldr r1, =0b110000								@ вычислить GPM данныезарегистрироватьсясерединаизценить, настраивать 0 для низкий уровень, настраивать 1 длявысокий уровень,здесьнастраивать 0 ~ 3 Кусочекдлянизкий уровень, Другоедлявысокий уровень
	str r1, [r0]									@ Воля r1 серединаизценить хранить в r0 указать на GPBDAT 0x7F008824 адресиз Памятьсередина
	mov pc, lr

##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 ;

##5. Вспышкакодприезжать Совет по развитиюи Выполнять ХОРОШО ###( 1 ) OK6410 Совет по разработка метода переключения


OK6410 Совет по разработка метода переключения : проходитьконтроль Совет по развитиюправая сторонаиз 8индивидуальныйвыключатель Приходитьнастраиватьзапускать Приходитьисточник;

  • 1.sdАктивация карты: (1~8) Кусочекнабор : 0, 0, 0, 1, 1, 1, 1, 1;
  • 2.запуск флэш-памяти Nand: (1~8) Кусочекнабор : x, x, x, 1, 1, 0, 0, 1;
  • 3. ни запуск прошивки: (1~8) Кусочекнабор : x, x, x, 1, 0, 1, 0, x;

###(2) Сделайте SD-карту загрузочной и подготовьте программу


Сделайте SD-карту загрузочным диском:

  • 1. Найдите совет по развитиюиз Вспышкаинструмент : OK6410-A Совет по развитиюиз Вспышкаинструмент существоватьразвиватькомпакт-диск A из OK6410-A-1G Пользовательский компакт-диск (A)-20160812\Linux-3.0.1\Инструмент записи Linux в каталоге, Совет по развитиюкомпакт-дискматериалскачатьадрес ;
  • 2.настраивать SD_Writer.exe свойство ( Система Win10 требует настройки ) : Щелкните правой кнопкой мыши по свойству, существуют колонки совместимости, настраивать к Windows 7 Запуск в режиме совместимости, инастраивать к Запустите эту программу от имени администратора ;
  • 3. Сначала отформатируйте SD-карту: Обратите внимание здесь, чтобы использовать SD_Writer серединаиз format функция форматирования , Следуйте инструкциям ниже, Нажмите «ОК», чтобы выполнить шаг за шагом. ;
  • 4.выбиратьхотеть Вспышкаиздокумент : Выбирайте здесь OK6410-A-1G Пользовательский компакт-диск (A)-20160812\Linux-3.0.1\Инструмент записи Linux\mmc_ram256.bin документ;
  • 5.Вспышкадокументприезжать SD карта : Нажмите напрямую Program кнопка, Только что прибыл SD карта;
  • 6.Подготовка LED лампапрограмма : Волякомпилироватьвнеиз gboot.bin Название документа изменено на u-boot.bin, Его необходимо изменить на имя документа, В противном случае его невозможно запрограммировать;
  • 7. Скопируйте Воляпрограмму в SD карта : Воляпрограмма скопируйте прямо в SD карта Прямо сейчас Может;

Ссылки : Метод программирования OK6410 для программы без платы Об этом вчера написал в блоге: как только ссылка;


###( 3 ) SecureCRT Подключить по развитиюи Вспышкапрограмма


SecureCRT Подключить по развитиюи Вспышкапрограмма шаг :

  • 1. Операция подключения оборудования: использовать USB изменять Инструмент последовательного порта Волякомпьютер и Совет по развитию Связь, USB Подключите компьютерный терминал,последовательный портконец Вставлятьсуществовать Совет по развитиюначальство, Подключите адаптер питания,нода Нетхотетьбитьоткрытьисточник питаниявыключатель;
  • 2.Совет по развитиюнастраивать : Воля Совет по развитиюправая сторонаизвыключательнастраиватьстановиться SD Картазапускать, Прямо сейчас (1~8) Кусочекнабор : 0, 0, 0, 1, 1, 1, 1, 1; Theшагочень важно;
  • 2. Запросите номер последовательного порта: существовать Управление устройствамиустройствосередина Посмотреть последовательный портпорт Число, здесьможно увидетьда COM9;
  • 3.SecureCRT подключается к последовательному порту: битьоткрыть SecureCRT программное обеспечение, Нажмите «Быстрое подключение», Затемсуществоватьбомбитьвнеиздиалоговое окносерединав соответствии с照下лапша进ХОРОШОсоответствоватьнабор, ① Первый, кто выбрал Serial протокол,② Затемвыбиратьпорт, этотиндивидуальныйпортот Управление устройствамиустройствосередина Проверять, ③ Выбор скорости передачи данных 115200, ④ Отмена RTS/CTS параметры;
  • 4.битьоткрыть Совет по развитию ( очень важно ) : выбрано SecureCRT программное обеспечение, Затем зажмите пробел, Эта операция очень важно, битьоткрыть Совет по развитиювыключатель, ① Сначала зажмите пробел, ②Сновабитьоткрытьвыключатель;
  • 5. Первый формат Nand Flash: выбирать [1] параметры, формат Nand Flash;
  • 6. Выберите из SD карта Вспышка : выбирать [2] Burn image from SD card параметры,от SD карта КСовет по развитию Вспышкапрограмма;
  • 7. Выберите для программирования u-boot: выбирать [2] Flash u-boot, Вспышка u-boot,встречаот SD карта Находить u-boot.bin документ, Потом приходит Вспышка nand flash середина,нравитьсяфрукты SD карта безиметь u-boot.bin Сообщит об ошибке;
  • 8.настраиватьот Nand Flash запускать : настраивать Совет по развитиюначальствоиззапускатьвыключатель, (1~8) Кусочекнабор : x, x, x, 1, 1, 0, 0, 1; в это время четыре LED полный свет;
  • 9. Дисплей эффектов: настраиватьиз GPBDAT зарегистрироватьсяценитьдля 0b110000, четыре LED лампа Всезажечься;
  • 10.Изменить LED лампа Отобразить параметры, а затем отобразить результаты : настраивать GPBDAT зарегистрироватьсясерединаценитьдля 0b110101 да первый и Нет.три LED зажечься;

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

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода