Доступны источники исходного кода arduino, вы можете бродить по ним, чтобы посмотреть, что они делают.
Как процессор (ядро) ботинок очень специфичен для этой архитектуры и, возможно, версии или вариации (у семейства avr есть несколько вариантов). Затем вы можете обернуть вокруг него чип, что-то тонкое, как процессор, где большая часть периферийных устройств и ресурсов находится в других чипах, или как микроконтроллер или система на чипе, где многие, если не все ресурсы, находятся на чипе. Atmel avrs на arduinos - это микроконтроллеры, на чипе есть достаточное количество ресурсов, хотя вы можете быть вполне довольны тем, что все приложения работают в чипе, что является точкой, если нет пользовательского интерфейса (кнопки и т. Д.) Или дисплея или что сделать чип полезным для человека? (образование конечно, но в конечном итоге вам нужно некоторое количество интерфейсов чипа)
С AVR процессорное ядро и чип-компания являются одной и той же компанией, они владеют/контролируют все это, прежде всего, используют микрочип (надеюсь, что они не будут ruin atmel), поэтому вы можете зайти на их сайт для всей информации, ядра процессора и информации о чипе. И, как мы надеемся, чипы похожи на семьи. Например, с ARM, хотя у руки есть процессорное ядро и другие чип-компании, многие из них обертывают вокруг себя свои вещи, а это значит, что вам нужно идти навстречу какой-то информации и чип-компании для остальных, а две материал, обернутый вокруг оружия, широко варьируется в мире, основанном на оружии, поскольку каждый поставщик чипов не собирается делать свой материал совместимым с другими компаниями-чипами по различным причинам, включая правовую защиту своего IP.
Итак, сначала вы должны понять, как загружается процессор, есть два основных способа: один из адресов адресов, адрес сброса, адрес прерывания, возможно, ошибки или другие прерывания. Программист заполняет эту таблицу (которая находится в какой-то нелетучей памяти (как правило, но не обязательно), как flash или rom), и эти адреса указывают на код для обработки этих событий.
Затем вы пишете код для обработки этих событий, который вы, кажется, задаете, является событием сброса. И, как он ответил, он становится очень чистым и специфичным для архитектуры. Во-первых, вы обычно (но не всегда, эти исключения бесконечны, поскольку не все архитектуры и чипы спроектированы точно так же, как и запуск модели-t отличается от запуска tesla, хотя они оба являются автомобилями с четырьмя колесами) чтобы указатель стека указывал на некоторую память, которую вы и разработчики чипов/систем знали адрес. Базовый материал только для того, чтобы заставить процессор работать, вам, возможно, придется инициализировать некоторые регистры общего назначения, но обычно нет, возможно, установить некоторые флаги функций процессора и т. Д. Возможно, вы хотите включить кеш или что-то в этом роде. Этот код обычно, но не всегда в энергонезависимой памяти, доступен только для чтения, поэтому вам может понадобиться настроить RAM, иногда не особенно с микроконтроллером. Затем вы можете настроить некоторые часы, общие как для микроконтроллеров, так и для процессоров, но детали очень чисты и специфичны для системы. Не всегда, но многие микроконтроллеры имеют встроенные RC-генераторы (резисторный конденсатор, опирается на скорость электронов, генерирует колебания, вечный двигатель, если вы это сделаете), но они не очень точны, поэтому, если вам нужна точность, вы можете их иногда настраивать или использовать плавкие настройки настройки, или часто вы хотите переключиться на кварцевый генератор, но это зависит от платы, и вам нужно выполнить некоторые специальные процедуры, чтобы переключиться на этот генератор. Вы также можете использовать PLL, если у вас есть на чипе, чтобы умножить скорость этого генератора, возможно, сделать 8Mhz внешних часов в 48Mhz часы в чипе.
Так что флаги, часы, память, стек не обязательно в таком порядке. И, может быть, еще несколько вещей. Далее, периферийные устройства, возможно, ваше приложение хочет использовать uart и контроллер spi и два таймера. Ну, вы должны принести их, все очень чистые. Иногда вам приходится включать часы в периферийные устройства, которые отключены при сбросе, чтобы сэкономить электроэнергию. Затем, в зависимости от того, какой режим вы хотите использовать эти универсальные периферийные устройства, вы должны настроить их для своего приложения. Повторяйте до тех пор, пока все они не настроены.
И тогда ваша заявка может потребоваться для инициализации, возможно, у вас есть датчик температуры, дисплей и SD-карта на шине или шинах.Вы должны поговорить с ними и инициализировать эти периферийные устройства в соответствии с их правилами и процедурами чипов.
В конечном итоге от десятков до десятков тысяч строк кода, ваше приложение может начать делать свою работу независимо от того, что есть.
У arduino есть загрузчик, который является особенностью чипа avr и, безусловно, используется дизайнерами и инструментами arduino. Если вы перезагрузите чип одним из контактов, утвержденных одним способом, он загружает свой загрузчик как приложение функцией в чипе. Если вы подтвердите этот вывод другим способом, затем перезагрузите его, он загрузится из флеш-приложения, запустив приложение. По крайней мере, с последовательным интерфейсом семейства микросхем AVR имеют несколько разных способов в загрузчик или логику, которые могут быть использованы для перепрограммирования флэш-памяти приложения «в цепи». В старые времена arduino это был интерфейс последовательного порта (uart) с простым протоколом, который был основан на продукте Atmel, но они вырвали большую часть из них, если вы действительно посмотрите на свой загрузчик и напишите свою собственную программу загрузчика, а не используете avrdude или песочницу Arduino. В любом случае это очень распространенное решение, и микроконтроллеры, как правило, имеют один или несколько способов в чипе для программирования, а затем в схеме, будь то загрузчик или логика или некоторая комбинация.
Этот загрузчик является полным приложением сам по себе, его целью является предоставление интерфейса, чтобы попросить его переписать флешку для вас. Будучи полным приложением, он должен делать все, что делает приложение, загружаться с помощью процессора, настраивать ресурсы/периферийные устройства, а затем продолжать выполнять основной код приложения.
Таким образом, вы можете перейти на сайт atmel и, возможно, взглянуть на микроконтроллеры attr avr на более простые или посмотреть на свой ардуино и найти семейство чипов, которые у вас есть, и загрузить ресурсы. Имена документов варьируются от поставщика к поставщику, как правило, что-то под названием «данные» включает в себя выходы pin pin и pin, информацию для заказа для детали (опции для номеров деталей, которые могут включать в себя количество контактов, количество флэш-памяти и т. Д.), и электрическая информация. Некоторые поставщики всей информации о программировании находятся в таблице данных, немного или нет в листе данных, и вам нужна форма справочного руководства или руководства пользователя или какое-либо другое имя, иногда есть семейное руководство, которое охватывает ядро процессора или все возможные периферийные устройства, тогда в техническом описании указывается, какой из возможных списков имеет чип и где (адрес процессора) они живут.
Справедливая сумма работы аппаратной инициализации - это исследование, поиск документов для платы и/или чтение схем, или если ваша компания готовит совет к инженерам оборудования и задает вопросы, если их материал непонятным или полным (часто не имеет смысла полностью документировать его, если все, что есть, это тот человек, и вы, заметки на доске или сообщения в виде скайпа или электронной почты будут достаточными для длинного документа, который вам действительно не нужен). У поставщиков чипов почти всегда есть ошибки, поэтому взломать из-за отсутствия лучшего термина требуется, чтобы узнать, делают ли биты в регистрах то, что говорит документ, или если вы можете понять, что они делают, высунув на них или прочитав их примерный код или другое открытый исходный код. За исключением очень конкретных приложений для очень конкретных систем вы найдете одно место со всей необходимой информацией об аппаратном обеспечении.
Он записывает начальное значение для каждого регистра, который имеет микроконтроллер. Поэтому вам нужно получить лист данных микроконтроллера и решить, какое значение вы хотите разместить в каждом регистре. – user3386109
почти никогда не нужно прикасаться к регистру, документация показывает или должна состоять после сброса, и вам не обязательно нужно прикасаться к тем, которые находятся в состоянии, которое вы хотите, при условии, что ваш init будет перезагружен. если нет, то самым простым является частичный сброс блока, а затем коснуться тех, которые вам не нравятся по умолчанию, в худшем случае касается большинства регистров в блоке. –
Я однажды разобрал программу AVR, и я не обнаружил аппаратной инициализации перед кодом запуска, сброс сразу же переходит к стартовому коду, и где он написан? –