Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » О программе BASCOM AVR/8051 » Как разбить программу на блоки и как их связать


Как разбить программу на блоки и как их связать

Сообщений 31 страница 38 из 38

1

Есть идея сделать блоки для отдельных программ. Для этого решил попробовать написать программу-мигалку.

Это код основной программы:
'****************************************

$Regfile="m328pdef.dat"$Crystal=16000000$baud = 9600$hwstack=40$swstack=16$framesize=32
'***************
dim lighton as  Bit
dim lightoff as  Bit
lighton = 1
lightoff=0
config  PORTB.4 = output
blinky alias portb.4

$include "blinkyled.bas"
do
gosub blinkyled
wait 1
loop

end

Это код подпрограммы (В отдельном файле):

blinkyled:
blinky = lighton
wait 1
blinky = lightoff
return

Подскажите пожалуйста: как делать такого толка подпрограммы в отдельных файлах с сылками, чтобы они не орали ошибками?

0

31

-NMi- написал(а):

Тело программы выполняет только роль инициализации проца и нечего более.

Почему это не может сделать программа, загружаемая через бутлоадер?
Получается аналог ардуины... Тогда проще ее взять.

0

32

Какая разница между ардуиной и баскомом???
По моему они абсолютно одинаковые, языки программирования только разные.
Скажу больше, добавьте waitms_50 в тело бутлоадера баскома в цикл ожидания ответа по UART и не нужно будет нажимать на Reset чтобы залить прошивку в проц через MCS_Bootloader.

Теперь суть моего вопроса. Представим абстрактный дом с верандой, гостиной, кухней и тд. В нём необходимо поддерживать температуру, влажность и включать свет в тёмное время суток. Программа контроля температуры, влажности и освещения является ОСНОВНОЙ функцией контроллера. Допустим, нам необходим ещё и контроль над входной дверью. Выводы у контроллера есть и мы можем их задействовать. Основная программа ОСТАЁТСЯ НЕИЗМЕННОЙ, мы только вызываем процедуру опроса датчика двери через определённое время и выводим (например) это на дисплей.
Так понятнее???

0

33

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

Отредактировано RDW (2017-12-07 15:57:11)

0

34

Никакого геморроя тут нет и не будет. Куча девайсов работает по этому принципу и не только на атмеге  :D
Кортексы и ARM-ы так-же работают и никаких проблем за много лет не было. (имею и использую в работе много покупных "железок" работающих по этому принципу)
Здесь задача сводится к некой гибкости девайса. Допустим, вы захотели переименовать комнаты или поставить датчик ещё на одну дверь или сделать вежливую подсветку или.... много чего...  Ваша задача будет только вставить нужную флешку в разъём и устройство само поймёт, что от него требуется. Надеюсь так будет ещё понятнее.
Ну и суть...
Подскажите как дать компилятору команду компилировать код для нужного адреса ИЛИ как узнать реальные адреса процедур. Идея с векторами на процедуры тоже имеет место быть реализована))) Ассемблер не предлагать, я так и определяю адреса раздэзом, тока вот это действительно гемоРР )))

0

35

-NMi-, проведи эксперимент, попробуй в одном коде использовать много $loader (советовали ранее), если компилятор баскома будет ругаться, то выход только по одному файлу собирать. Если удастся собрать из одного - гуд.

На счет устройств, перетыкания и всё о всех знают - это вообще всё ща решается на элементарном esp8266, подключай пока сегмент не закончится (254 устройства). Правда потребуется ещё сервер и будут задержки (если не перегружать потоком), зато мега гибкость.
От уникальности адреса/имени устройства никуда не деться, да есть протоколы позволяющие на горячее подключение сразу многих устройств раздавать адреса, но этот механизм точно не даст ясности картины реального распределения устройств в сетке. Всегда будет присутствовать режим конфигурирования ДО или ПОСЛЕ подключения. Без уникальности - никуда. По этому я и предлагаю создать просто гибкий модуль, который изначально можно конфигурировать (где какой вход/выход или другие свойства).

0

36

ESP...  :crazyfun:  енто крутой чип ))) имею с десяток разных.... тока там ЫзЫк нипонятнай  :O  луа толи лиа низнаю как на нём кодить...

А на счёт $loader конечно можно провести эксперимент...  я просто спросил, может кто заморачивался... ну нет так нет.

Тогда у меня другой вопрос есть.
Имею проект на 328Р атмелине с кучей менюшек. Глянул прошку в хексе и афигел... половина прошки - ексты с менюшек. А вот как вам такая идея: возьмём и сделаем в озу буфер на 20х4 символов под дисплей 20Х4 а текст для меню будем подгружать с внешней флешки, например 24с256 или более. Как вам такой вариант или может кто что иное предложит???

0

37

-NMi- написал(а):

ексты с менюшек

Что это, непонятно.

-NMi- написал(а):

возьмём и сделаем в озу буфер на 20х4 символов под дисплей 20Х4 а текст для меню будем подгружать с внешней флешки, например 24с256 или более. Как вам такой вариант или может кто что иное предложит

Да легко, делай что нравится. Вариантов может быть масса. Я похожими решениями пользовался не раз. Удобство в том, что внешнюю флешку потом можно в любой момент "обновлять" данные. Но это тогда получится то, что о чем раньше говорил:

RDW написал(а):

предлагаю создать просто гибкий модуль, который изначально можно конфигурировать

0

38

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

0


Вы здесь » Программирование ATMEL в BASCOM. » О программе BASCOM AVR/8051 » Как разбить программу на блоки и как их связать