2012-01-13 3 views
0

Я только недавно пытаюсь проникнуть в встроенное программирование и ищу несколько ресурсов. Я сделал довольно много программирования на языках более высокого уровня, но всегда был очарован тем, как работает аппаратное обеспечение. В качестве форсирующей функции, чтобы я наконец узнал об оборудовании, я недавно приобрел BeagleBoard XM с целью программирования его голого металла со сборкой.Сборка для Bare Metal BeagleBoard

Я провел неделю или около того, прочитав TRM в свое свободное время, а также проверил в Интернете пример кода. Я нашел несколько ресурсов, которые являются хорошими примерами для отображения данных через последовательный порт, но ничего сверх этого. Я надеялся найти несколько примеров людей, использующих прерывания и sdma, но еще не нашел их. Моя цель в качестве стартового проекта состоит в том, чтобы написать очень простую программу, которая будет вводить символ из последовательного порта и повторять его обратно на экран. Я хотел бы сделать так, чтобы он использовал прерывания/sdma. Чтение через TRM не очевидно, как это сделать. Будучи совершенно новым в этом вопросе, невероятно сложно точно знать, что мне даже нужно искать, чтобы понять документацию. Я задавался вопросом, есть ли там какие-либо эксперты, которые могли бы предоставить какой-либо образец asm-кода, который использует несколько аппаратных функций BeagleBoard. В конце концов, никакая документация не может заменить хороший конкретный пример кода.

+2

Откровенно говоря, я не думаю, что «Бигл» - идеальное средство для изучения голого металлического способа выполнения встроенных вещей. Предлагаю вам получить недорогую плату на основе, например, LPC17xx - проверить mBed или LPCXpresso. – fvu

+0

Да, я начал с книги и нескольких микроконтроллеров pic. Beagleboard - забава, но это не лучшее место, чтобы начать изучать встроенную сборку. –

+0

Я читал, что вы можете запускать linux на beagleboard. Вероятно, он использует asm для загрузки. Также, если у вас есть код c, вы можете скомпилировать его и посмотреть на разборку. –

ответ

1

BeagleBoard использует Cortex-A8. Это довольно сложный чип, и это не тривиально, чтобы заставить его работать только от чтения руководств, особенно для новичков. Вы можете попробовать прочитать существующий код, который уже работает на нем - U-Boot и, возможно, драйверы ядра Linux. Не ожидайте увидеть много сборок, кроме кода запуска самого низкого уровня.

Но, вероятно, лучшая идея - это то, что предложил fvu - получить простую плату MCU, такую ​​как LPCXpressor или mbed и playh с ней. Cortex-M3/M0, хотя и не тривиальна, намного проще работать, и для разных периферийных устройств доступно множество простых небольших образцов.

1

Я должен согласиться с тем, что говорят все остальные. Хотя, теоретически, все, что вам нужно, есть, бигль - не лучшая платформа для таких вещей, как в первый раз. У меня есть несколько примеров того, как воспитывать несколько небольших микроконтроллеров http://github.com/dwelch67, и есть такие сайты, как http://gandalf.arubi.uni-kl.de/avr_projects/arm_projects/ и другие с еще большим количеством примеров.

У меня есть beagleboard, baremetal uart out code, но кажется, что у вас есть это (в yagbat, из-за отсутствия лучшего места (не стоит собственного репо) у меня есть каталог beagleboard).

Пусковая панель msp430 составляет менее 5 долларов США, а не плохой процессор. Сделано с помощью инструментов texas (тех же людей, которые делают omap), поэтому руководства должны иметь схожие ощущения.

Есть, конечно, ардуины, но вы хотите обойти песочницу, что не сложно, посмотрите на мои примеры.

Чтобы остаться в семействе рук, есть mbed (около 50 долларов США +), (избегайте песочницы, легко сделать) и хорошего, что вам может понравиться, поскольку это всего лишь микроконтроллер со всем, что у него есть это панель обнаружения stm32f4 от st, у меня есть ссылки на моей странице с примерами. Он составляет около 20 долларов США, достигает 168 МГц, имеет сокращенный блок с плавающей запятой (редкий для микроконтроллера) отдельный блок инструкций и данных, множество ram/rom по сравнению с другими микроконтроллерами и т. Д. Все по этой дешевой цене 20 долларов.

Многие из этих микроконтроллеров будут иметь большой палец или большой палец + thumb2. Кора-m3 и 4 являются armv7-м, так что большой палец плюс полный thumb2. cortex-m0 и -m1 основаны на armv6, поэтому поддерживайте немного большого пальца2, недостаточно, чтобы беспокоиться. У меня есть эмулятор большого пальца, который вы можете играть с большим пальцем (без поддержки большого пальца2).Я думаю, что кора-A в beagleboard основана на armv7, поэтому она поддерживает тот же самый большой палец + thumb2, что поддержка cortex-m3 и -m4. Stm32f4 -m4 на основе mbed поставляется в двух вариантах: один -m3 и новый -m0. Многие микроконтроллеры на основе коры головного мозга -m3 основаны на том, что сначала появились -m4 и -m0, только набирают силу. Вы можете с помощью большого или большого пальца2 начать использовать унифицированный набор команд, который размывает между рукой и большим пальцем (2), позволяя одному источнику собираться как с командами рук, так и с инструкциями большого пальца (с некоторыми ограничениями, конечно). Таким образом, вы можете просто написать в палец/thumb2 и передать это знание непосредственно в cortex-A (с одной инструкцией bx для переключения режимов с ARM на большой палец) или взять ваш код большого пальца2 или унифицированный код непосредственно в корку-A и собрать в виде рука.

Самая большая вещь здесь не в том, чтобы изучить сборку, хотя ключ читает руководства, чем больше руководств от большего числа поставщиков, тем лучше вы понимаете, как найти информацию, необходимую для этой более сложной цели. По моему опыту, мне было нелегко и с частями руководства omap. Большинство руководств имеют ошибки, или являются неполными, и т. Д. Вы должны научиться работать/взламывать это, и это просто требует опыта. С помощью omap вам, скорее всего, придется выкапывать источники Linux или uboot для этой платформы в дополнение к руководству. Поскольку beagle использует загрузчик, это хорошо, потому что некоторые вещи для вас сделаны, это плохо, потому что вам нужно перестроить аппаратное и программное обеспечение, чтобы определить, где разместить таблицу векторов прерываний, чтобы вы могли выполнять решения на основе прерываний. Я настоятельно рекомендую начинать с не прерывания, опроса, основанного, а затем медленно переводить знания на прерывание. Попытка попасть в домашний бег каждый раз на летучей мыши не удастся. Возьмите его за один базовый удар за раз.

0

Ваша проблема в двух аспектах: понять, как использовать baremetal и программировать ОС и понимать аппаратное обеспечение beagleboard. Для последнего я рекомендую посмотреть код других людей вместе с таблицами данных. Чтение данных только очень трудоемко. Начните с U-код загрузки для BeagleBoard:

Некоторые другие baremetal проекты, которые не являются BB-XM, но я нашел полезным:

Вторая проблема заключается в том, чтобы понять низкоуровневое программирование на ARM. Я рекомендую эти книги, однако обратите внимание, что они написаны для более старых архитектур. Тем не менее, они все равно должны быть очень полезными для вас:

Последний даже есть глава о написании собственной небольшой операционной системы.

Смежные вопросы