Существуют ли соглашения о кодах для сборки (в основном PIC)?[закрыто]
-
09-09-2019 - |
Вопрос
Существуют ли соглашения о кодах для сборки (в основном PIC)?
Решение
мне удалось найти Руководство по стилю языка ассемблера (PDF) которые могут вас заинтересовать.
Другие советы
При написании ассемблера это очень полезно и совсем не перебор Комментируйте каждую строку
Это зависит от того, программируете ли вы на ассемблере или используете компилятор c для создания сборки. Если важна производительность, не используйте компилятор c, напишите ассемблер самостоятельно.
но в целом принято комментировать каждую строку, использовать простые подпрограммы со значимыми именами указателей.есть что-то, что вы бы прокомментировали в блоке, т.е.
start: movlw 0x24 // \
movf count // put 24 into count
MyCount: decfsz count //decrement count and exit if done
goto myCount //do the loop
goto exit //count is done exit
это типичная кодировка: первый столбец для указателей адреса, следующий для команды и связанных с ней переменных. Обычно вы определяете переменные в разделе заголовка перед фактической программой, но это зависит от используемого вами ассемблера.некоторые не предоставляют вам опцию указателя переменной, и вам придется использовать прямую ячейку памяти.если вы посмотрите на закомментированный код, выходящий из дизассемблера, это будет выглядеть так.
0020 movlw 0x24
0021 movf 0x25 // 0x25 = memory address of count
0022 decfsz 0x25
0023 goto 0x0022 // loop back to 0x22 until count = 0
0024 goto 0x01FF
затем вы закомментируете это, обязательно сгруппируйте свой код, используйте 'nop' для смещения кода на хорошие круглые числа, например, начните с адреса 20, оставив адреса между 2 и 20 свободными для прерываний и тому подобного.В зависимости от чипа я пишу много кода для 12f675, поэтому обычно использую именно эту модель.
также храните код в простых понятных подпрограммах, и адреса должны быть красивыми круглыми числами, оставляя блоки по 10 или около того между вашими первоначальными подпрограммами, вы всегда можете вернуться и сжать свой код позже.и всегда комментируйте свой код, вы не можете прокомментировать его достаточно.
Кроме того, я обычно помещаю свой маршрут инициализации как можно ближе к концу памяти, оставляя максимальное пространство для этой реальной программы.
Надеюсь, это кому-то поможет.
Я не думаю, что здесь есть что-то формальное, но чтение примеров кодирования на их веб-сайте дает вам представление об обычных идиомах.просто имейте в виду, что существует множество «вкладов» от разных любителей, и они могут быть не такими уж хорошими.
также проверьте другие проекты, у большинства из них будет уродливый код;но вы найдете драгоценный камень или два.
я никогда не программировал на PIC, но любил читать код.я смутно помню «ОС реального времени» с действительно приятным и понятным потоком выполнения.не помню, насколько последовательным был стиль кодирования, но я бы начал с этого.
лучше прочитать большинство из них, и когда это будет так же легко, как проза, тогда ты найдешь свой стиль
Я поддерживаю Джейсона С. Используйте компилятор C, если это возможно, даже если в конечном итоге вам придется встроить несколько строк ассемблера в файл «.c», используя ключевое слово «__asm».
Если вам необходимо писать целые программы на ассемблере для PIC, рекомендуемое соглашение о вызове функций:Список PIC:Пейджинг PIC и PCLATH.
Это действительно будет зависеть от модели PIC, которую вы используете.Например, для PIC16 и PIC18 есть множество примеров сборки, которые легко найти в сети.
Однако такие модели, как PIC24 и PIC32, гораздо больше ориентированы на C.Существует множество примеров PIC на языке C, которые можно найти на веб-сайте для вашей конкретной модели PIC.Эти модели PIC все еще можно программировать на ассемблере, но в Интернете очень мало примеров того, как это сделать.Лучший ресурс для этого находится в MPLAB в разделе «Справка», проверьте «Содержимое справки» любого ассемблера, который использует ваша модель PIC.Здесь вы увидите несколько примеров, а также инструкции о том, как программировать на ассемблере PIC и выполнять простые задачи PIC, такие как определение памяти или запись макросов.