Какой лучший ресурс для изучения языка ассемблера для микроконтроллера PIC [закрыт]

StackOverflow https://stackoverflow.com/questions/1473454

Вопрос

Я собираюсь начать работать над проектом, в котором мне нужно иметь приличное представление о языке ассемблера для микроконтроллеров PIC.Я хорошо знаком с C / C ++, поэтому я знаю, как кодировать по большей части, и я уже выполнил много проектов для PIC, поэтому я понимаю архитектуру, но все свое программирование для нее выполнил на "C".

Есть ли хорошая книга или веб-сайт, который хорошо объясняет, что означают все команды сборки и как выполнять довольно простые задачи (мигание светодиодов, базовая математика и т.д.) Для микроконтроллера PIc?

Редактировать:Основная цель этого поста - запросить ресурсы для изучения ассемблера, а не обсуждать достоинства C против Assembly в PIC или является ли PIC "хорошим" микроконтроллером для использования.Я использую микроконтроллер PIC18, если это имеет какое-либо значение.

Это было полезно?

Решение

Я бы попробовал это:Учебник по картинкам

Другие советы

Существует более одной архитектуры PIC со значительно разными наборами команд.Например, микрочип не имеет такой архитектурной согласованности, как Atmel AVR.Поэтому вам нужно указать, что вы используете — PIC12, 16, 24, 32 например.

Поэтому, прежде всего, я бы посоветовал избегать ассемблера PIC на том основании, что то, что вы узнаете, скажем, о PIC12, может быть не совсем применимо к PIC24.Во-вторых, я бы вообще избегал использования PIC, если бы мог, как разработчик программного обеспечения, хотя я признаю, что есть и другие соображения, и у вас может не быть выбора.

У вас может быть выбор – не использовать ассемблер.Хотя PIC нижнего уровня, пожалуй, не лучше всего подходят для генерации кода C, это проблема автора компилятора;по-прежнему более рентабельно с точки зрения времени разработки использовать C, где это возможно.С другой стороны, для продуктов большого объема, если вы можете уместить код в меньшую часть с помощью ассемблера, это может иметь значение.Решение, что вам нужен ассемблер до того, как вы протестировали решение на языке C, часто является «преждевременной оптимизацией».Даже если реализация C не соответствует ограничениям по размеру или времени, вы можете просто назвать ее прототипом и перекодировать ее в соответствии с ограничениями.Выполнение этого все же может быть быстрее, чем начинать кодирование на ассемблере с нуля и одновременно бороться с дизайном и набором команд.Скажите своему начальнику, что вы создадите его прототип на C, и тогда, когда он будет соответствовать требованиям, никто не захочет тратить деньги на перекодирование, это непереносимый и неподдерживаемый ассемблерный код.

Наконец, чтобы ответить на ваш вопрос, предполагая, что вам нужно выполнить работу быстро и эффективно, используйте как можно больше примеров и примечаний к приложению Microchip и ознакомьтесь с набором команд из справочника по набору команд производителя.Набор команд для младших частей невелик.Для повседневной работы мне нравится использовать «Справочную карточку набора инструкций» в качестве памятки — в ней суммируются все основные детали каждой инструкции, обычно на нескольких страницах — распечатайте ее на двух сторонах и заламинируйте!;).Вот Пример PIC16

Возможно, это довольно поздний ответ, но вы могли бы извлечь пользу из этого лабораторного курса, написанного в первую очередь для изучения сборки PIC с помощью приложений.

Проверить: http://embedded-ju.ucoz.com/

Проверьте вкладку эксперименты, она включает в себя:

Эксперимент 0 - (Введение в MPLAB)

Эксперимент 1 - (Введение в набор инструкций по сборке PIC)

Эксперимент 2 - (Подробнее о наборе команд и методах модульного программирования)

Эксперимент 3 - (Базовый системный анализ и проектирование)
3.1.Руководство по оборудованию I

Эксперимент 4 - ( ЖК - дисплей - HD44780 )

Эксперимент 5 - (Клавиатура)

Эксперимент 6 - (С использованием высокотехнологичного компилятора C в MPLAB) 6.1.Программирование PIC с помощью руководства ICD2.

Эксперимент 7 - (Таймеры (Timer0 и Timer2))

Эксперимент 8 - (USART)

Эксперимент 9 - (Программный ШИМ и А/Д)


Он основан на сериях PIC 16, в первую очередь на 16f84A, 16F877A и 16F917 ..примеры полностью прокомментированы, а эксперименты полностью объяснены.

Я сторонник написания дизассемблера.Начните с очень простой одно- или двухстрочной программы, которая, возможно, загружает регистр с константой (нужно прочитать учебник или что-то еще, чтобы изучить этот шаг).Соберите его.Сохраните двоичный файл в формате, в котором вы можете или хотите написать программу для чтения (возможно, intel hex или elf, если они это поддерживают).

Напишите программу для чтения двоичного файла и извлечения программы, затем возьмите эти байты и напишите дизассемблер (даже если у поставщика есть дизассемблер, вам все равно следует его написать).

Теперь начните повторять процесс, изучайте новую инструкцию или новый способ использования этой инструкции, по одной инструкции за раз.Напишите код для дизассемблирования этой инструкции или опции.Попробуйте написать ассемблер, чтобы манипулировать каждым битом инструкции.

К тому времени, как вы освоите набор команд, вы будете знать набор команд лучше, чем большинство людей, которые используют его каждый день, вы будете знать, как писать ассемблер для каждого из вариантов каждого из кодов операций, вы также можете узнать, почему эта инструкция может обращаться только к N байтам из своего местоположения, а другие могут получить доступ к чему угодно, или эта инструкция может использовать только N бит непосредственно, а другие могут использовать любое значение.Что-то в этом роде.

Я использовал этот процесс много раз и изучил множество наборов инструкций, ymmv.После первой пары-тройки описанный выше процесс может занять всего лишь полдня.

РЕДАКТИРОВАТЬ:

Целью здесь является образование, а не очередной великий проект SourceForge.Вывод может быть настолько уродливым или неполным, насколько вам хочется, и читать его будете только вы.

Примечание:Общий дизассемблер для наборов команд переменной длины может быть несколько сложным, вы не хотите линейно дизассемблировать двоичный файл, в этом случае вы хотите следовать всем путям выполнения.Я бы избегал этого.Взяв простые программы, которые выполняют несколько линейную ассемблирование, а затем дизассемблирование не представляет сложности даже с набором команд переменной длины.Вы можете многое узнать о наборе команд, дизассемблируя и исследуя выходные данные компилятора C (или другого языка высокого уровня). Если у компилятора нет опции вывода ассемблера или нет дизассемблера, вы можете не получить чтобы воспользоваться этим (если только это не набор команд фиксированной длины).

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

Список изображений: http://piclist.com/ .

В частности,

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top