Форум по микроконтроллерам: [asm] Как разбить длинный исходник для уменьшения вертикальной прокрутки? - Форум по микроконтроллерам

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[asm] Как разбить длинный исходник для уменьшения вертикальной прокрутки?

#1 Пользователь офлайн   mf323 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 84
  • Регистрация: 27 Январь 13
  • ГородУфа

Отправлено 22 Ноябрь 2016 - 19:01

Привет всем!
Собственно, проблема такая,- начал в очередной раз проект (ide 8.92), кое-что уже готовое как обычно накидал из других кодов, и как бы получается, что 3700 строк уже существует, и теперь надо дописывать-переписывать, то в одном месте глянуть, то в другом. Структуры всех моих программ повторяются из кода в код,- прерывания на своем месте, загрузка счётчиков в своем, подпрограммы тоже рядышком, область для таблиц .... итд, и я прекрасно в этом ориентируюсь, но эта вертикальная прокрутка просто убивает и время и желание что-то писать.
Вот и появилась задумка, вернее представление того, как могло бы быть удобнее.

То есть речь о том, чтоб разбить исходник по длине на несколько отдельных ***.asm, и переключать их по вкладкам в окне редактора. Иными словами уменьшить вертикальный объём за счёт увеличения горизонтального. Ну а главное, компилятор должен воспринимать эти отдельные файлы как один (это наверное и есть основная непонятка для меня). В общем, если кто сталкивался или знает как такое сделать, вразумите пожалуйста.

p.s. (ctrl+l, ctrl+k - пытался пользоваться, но что-то так и не прижилось; монитор переворачивать тоже не то, ну буду я видеть сразу строк 100, т.е. в два раза больше чем сейчас, и ничего особо не изменится, а вот лишних неудобств прибавится)
0

#2 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • PipPipPipPip
  • Группа: SuperMod
  • Сообщений: 1 391
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 22 Ноябрь 2016 - 21:44

Я обычно делаю "куски" по функциональности и подключаю к проекту.INC Потом они легко переносятся в другие проекты. Например, работа с ЕЕПРОМ,
Прокручивать не приходится, достаточно выбрать нужную папку и посмотреть её.
Вот например, последний таймер, весь проект. Программа написана за день, без сильного напряга. Все уже было давно готово, чуть подправить под задачу.
Прикрепленный файл  taimer_O.rar (43,13К)
Количество загрузок:: 71
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#3 Пользователь офлайн   mf323 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 84
  • Регистрация: 27 Январь 13
  • ГородУфа

Отправлено 22 Ноябрь 2016 - 23:26

Открыл у себя,поизучал что да как. Действительно удобно, можно смотреть по вкладкам. Спасибо за информацию.
Открыл и свой проект, вырезал для пробы кусок с дефайнами (флаги, пины) и создал ещё один asm (не inc) в папке с остальными файлами проекта, создал строку с include "xxx.asm". Всё нормально скомпилировалось. Только получается надо в маленьком окошечке как бы всегда "официально подключать" такие дополнительные файлы к проекту чтобы иметь возможность их тоже открывать в окне редактора?

Выходит я могу делать вот такие отдельные файлы с какими-то определенными кусками, например весь обработчик прерываний, область с таблицами - у всего этого есть точное указание по началу в области памяти программ (org). А как к примеру вынести участок кода из основоного цикла? Поясню: в основном цикле у меня есть область, куда я ухожу например каждые 10мс по своему флагу, который поднимается в обработчике, то есть идёт длинный участок где происходит то, что должно происходить с периодичностью каждые 10мс, это и счетчики и проверки кое-какие...итд. Так вот, как его вынести в отдельный файл, если он как бы имеет своё конкретное место, как потом компилятор узнает где его место? А чётко застолбить место по org я тоже не могу, поскольку начало этого участка зависит от "длины" обработчика и кое-какого начального кода после.
0

#4 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • PipPipPipPip
  • Группа: SuperMod
  • Сообщений: 1 391
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 23 Ноябрь 2016 - 08:37

Лучше создавать inc. Тогда сразу понятно где заголовок начало программы.
Да и переносить потом легче

Привязываться к определенному месту org, не практично. Надо все время контролировать, чтобы не было накладок при изменении в тексте.
Лучше работать без привязки, особенно если программа большая на несколько страниц. Я когда-то с этим разбирался.
Здесь есть моя статья.
Ну и по последнему вопросу.
Где начинается Ваш кусок Ставите include и все.

include <OPRED_DANNIX.inc>
org 0x000
nop
goto START
include <OBRAB_INT.inc>
include <INIT_PIC.inc>

Где OPRED_DANNIX.inc
Прикрепленный файл  OPRED_DANNIX.rar (2,86К)
Количество загрузок:: 68
для примера, весь заголовок и определение данных. Если что надо будет изменить, достаточно открыть папку, а не крутить портянку.
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

#5 Пользователь офлайн   mf323 

  • Знаток
  • PipPip
  • Группа: Пользователи
  • Сообщений: 84
  • Регистрация: 27 Январь 13
  • ГородУфа

Отправлено 23 Ноябрь 2016 - 16:29

В общем поэкспериментировал я с подключением и пришёл к некоторым промежуточным выводам. К примеру, если создать файл tab_p0.asm, то в строчке
include	 "tab_p0"
не обязательно указывать расширение.
А вот для файлов с другими расширениями придётся.
Я пока решил, что буду разделять код именно файлами вида ***.asm, а вот скажем, файл макросов будет с расширением inc, думаю, так как бы наглядней.

Но есть и один нюанс в этом подходе. Дело в том, что у меня есть такие папки, в которых сразу находятся несколько проектов, то есть разные версии под одно и тоже устройство, типа ver4.1, ver4.2 .... итд, и естественно исходники у них имеют те или иные отличия. Так вот, в такой ситуации я уже не смогу кинуть "универсальный" подключаемый файл в эту общую папку, поскольку для каждого кода он должен быть свой (по содержанию). Короче это приведёт к необходимости назначения уникальных имен, но этот путь не устраивает, поэтому похоже придётся разделять проекты по принципу - один проект, одна папка.

MAZ, что касается привязки к определенному месту по org. Таким образом я только привязываю таблицы и начало кода для новой страницы, а больше и нечего вроде. Таблицы например, я всегда располагаю по последнему блоку (256) в странице. Той, откуда чаще всего она(и) вызывается. Так делаю исключительно, чтоб не думать о переходах через границу блока, ведь в одном коде меньше, в другом больше таблиц, разве так не практично?
Вот стандартное (для меня) начало области таблиц в нулевой странице:
Скрытый текст

В итоге, например мне нужно прыгнуть в TAB.CH.ADC, я это делаю так:
...
             MOVLW        LOW TAB.CH.ADC
             GOTO         TAB
...

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

#6 Пользователь офлайн   MAZ 

  • Консерватор - до мозга костей и суставов
  • PipPipPipPip
  • Группа: SuperMod
  • Сообщений: 1 391
  • Регистрация: 15 Февраль 11
  • ГородРоссия

Отправлено 23 Ноябрь 2016 - 17:41

Можно в каждой папке определить данные для этой папки. Тогда переносится без проблем и подключается. Не помню директиву, давно не пользовался, она определяет блок переменных, которым при компиляции проекта автоматически присваиваются адреса в памяти данных. Если не видели эту статью, то посмотрите пункт 4.2.
Можно не определять, а просто скопировать текст из папки в нужную папку. Тогда при компиляции мы увидим все неопределенные данные, которые не сложно создать в файле определения.


С таблицами можно и так. Но, если у Вас таблица больше 300 строк? Если у Вас таких таблиц больше 10? Привязав их к началу блока не поможет, но постоянно устранять "накладки" придется. Если программа маленькая, я тоже не заморачиваюсь. Особенно если таблица дешифратора индикатора и несколько небольших ВП.
Я хотя и консерватор и не иду в ногу со временем :D , но считаю каждый делает, так как ему удобно. Зачем что-то навязывать, тем более против шерсти. Путем проб и шишек вырабатываются определенные правила, удобные для каждого, на свой субъективный взгляд. Главное результат, и чтобы самому было приятно.
Мы же любители. :drinks:
Если бы Бог не был консерватором, вместо десяти заповедей мы имели бы десять предложений
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей