Например TDA7294

Форум РадиоКот • Просмотр темы - программа оболочка для win и программирование
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пн июл 21, 2025 21:17:19

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 72 ]    , 2, ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Вт май 18, 2010 20:14:06 
Вымогатель припоя
Аватар пользователя

Карма: 1
Рейтинг сообщений: 2
Зарегистрирован: Пт фев 20, 2009 12:26:26
Сообщений: 540
Рейтинг сообщения: 0
Собственно я имел в виду, что взяв данное устройство либо устройство предложенное PB_EXPERT за основу, можно написать управляющую программу для компьютера, работающую с данным простым устройством. Позже можно будет расширить аппаратную часть, когда более - менее разберетесь.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Вт май 18, 2010 20:23:46 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Цитата:
А для написания программы микроконтроллера достаточно знать бейсика или же программа там пишется исключительно на ассемблере?
Можно писать на бейсике.
Для PIC это mikroBasic (у него есть библиотека функций, для создания HID устройства. Пробовал создавать устройства - работают :) ).
Для AVR, это BASCOM.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Вт май 18, 2010 20:37:02 
Родился

Зарегистрирован: Вт май 18, 2010 11:07:19
Сообщений: 19
Рейтинг сообщения: 0
Yftul писал(а):
Собственно я имел в виду, что взяв данное устройство либо устройство предложенное PB_EXPERT за основу, можно написать управляющую программу для компьютера, работающую с данным простым устройством. Позже можно будет расширить аппаратную часть, когда более - менее разберетесь.


А какой именно микроконтроллер, по своему опыту, можете предложить использовать?
PB_EXPERT писал(а):
Цитата:
А для написания программы микроконтроллера достаточно знать бейсика или же программа там пишется исключительно на ассемблере?
Можно писать на бейсике.
Для PIC это mikroBasic (у него есть библиотека функций, для создания HID устройства. Пробовал создавать устройства - работают :) ).
Для AVR, это BASCOM.

С PureBasic они не совместимы? Для изучения более одного языка программирования меня не хватит :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Вт май 18, 2010 20:51:49 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
memento писал(а):
С PureBasic они не совместимы? Для изучения более одного языка программирования меня не хватит :)
Частично совместимы.
То есть, основы очень похожы, а дальше есть отличия.
В бейсике для МК есть команды для работы с I2C, SPI, 1-Wire устройствами, которых в компе нет, поэтому в бейсике для компа, нет таких команд, но зато есть команды для создания окон, меню, чего нет в контроллерах.


Вернуться наверх
 
Выбираем индустриальные и медицинские источники питания MEAN WELL в открытом исполнении

Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Вт май 18, 2010 20:52:34 
Вымогатель припоя
Аватар пользователя

Карма: 1
Рейтинг сообщений: 2
Зарегистрирован: Пт фев 20, 2009 12:26:26
Сообщений: 540
Рейтинг сообщения: 0
Вопрос сложный:) проще всего наверное будет освоить AVR, тем более что пара схем у Вас практически есть, да и программатор для него схемой повторяет одно из устройств, которые Вам все равно делать придется. Но в любом случае это не более чем мое имхо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Вт май 18, 2010 21:13:24 
Родился

Зарегистрирован: Вт май 18, 2010 11:07:19
Сообщений: 19
Рейтинг сообщения: 0
Yftul писал(а):
Вопрос сложный:) проще всего наверное будет освоить AVR, тем более что пара схем у Вас практически есть, да и программатор для него схемой повторяет одно из устройств, которые Вам все равно делать придется. Но в любом случае это не более чем мое имхо.

Вашему ИМХУ я, в этом вопросе, доверяю больше, чем своему. :)
а расширить количество входов-выходов будет сложно в дальнейшем или это решится лишь добавлением ещё одного МК?
PB_EXPERT писал(а):
memento писал(а):
С PureBasic они не совместимы? Для изучения более одного языка программирования меня не хватит :)
Частично совместимы.
То есть, основы очень похожы, а дальше есть отличия.
В бейсике для МК есть команды для работы с I2C, SPI, 1-Wire устройствами, которых в компе нет, поэтому в бейсике для компа, нет таких команд, но зато есть команды для создания окон, меню, чего нет в контроллерах.

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


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Вт май 18, 2010 21:24:48 
Вымогатель припоя
Аватар пользователя

Карма: 1
Рейтинг сообщений: 2
Зарегистрирован: Пт фев 20, 2009 12:26:26
Сообщений: 540
Рейтинг сообщения: 0
>> расширить количество входов-выходов будет сложно в дальнейшем или это решится лишь добавлением ещё одного МК?

Даже в исходной схеме полно незадействованных выводов, на худой конец действительно можно будет поставить банальные регистры или еще один МК .


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Вт май 18, 2010 21:29:10 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Цитата:
а расширить количество входов-выходов будет сложно в дальнейшем или это решится лишь добавлением ещё одного МК
Не обязательно МК.
Расширитель выходов можно сделать на основе микросхемы 74HC595N. Стоят они копейки и их программировать не нужно. :)
Если включить последовательно 10 таких микросхем, можно получить 80 выходов, задействовав всего 3 вывода МК.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Вт май 18, 2010 21:58:26 
Вымогатель припоя
Аватар пользователя

Карма: 1
Рейтинг сообщений: 2
Зарегистрирован: Пт фев 20, 2009 12:26:26
Сообщений: 540
Рейтинг сообщения: 0
PB_EXPERT Не встречали HID компонентов для Delphi случайно? Или может примеров для FASM? Правда я уже забыл когда последний раз программировал и на том и на другом :( а слово BASIC (именно так, большими буквами) вызывает стойкий рвотный рефлекс :? .


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Вт май 18, 2010 22:15:00 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Yftul писал(а):
PB_EXPERT Не встречали HID компонентов для Delphi случайно?
Посмотри здесь viewtopic.php?f=20&t=15405&start=100
Там есть DLLка для работры с HID. На бейсике написана. :)
А на предыдущих страницах темы, есть упоминание про дельфи.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Вт май 18, 2010 22:36:33 
Вымогатель припоя
Аватар пользователя

Карма: 1
Рейтинг сообщений: 2
Зарегистрирован: Пт фев 20, 2009 12:26:26
Сообщений: 540
Рейтинг сообщения: 0
Ок, спс. Интересная DLL'ка, будем посмотреть как (если :( ) будет время :beer:

А Вы профессионально этим занимаетесь или тоже баловства ради? :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Вт май 18, 2010 23:41:48 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Мне просто интересна тема HID устройств.
Есть небольшой опыт разработки HID устройтв на PIC и AVR контроллерах.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Чт май 27, 2010 21:25:12 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
ИМХО хватит плодить быдлокодеров - не стоит замусоривать мозг Basic'ом. Лучше сразу изучать С для ПК и МК и ассемблер для МК - без знания специфического ассемблера невозможно достаточно хорошо изучить архитектуру МК и писать эффективные программы (и вообще понимать, что к чему), а про реализацию USB (и четких временных интервалов вообще) на бейсике можно просто забыть. Максимум, для чего он пригоден - мигалки и свистелки. Ассемблер нужен для понимания процессов, происходящих в железе, да и небольшие программы для МК гораздо удобнее писать на нем, а начинать так вообще однозначно надо с него, иначе выйдет быдлокодер. Под С есть куча библиотек, в частности и реализации USB-HID, хотя я предпочитаю общаться с USB с помощью FT232 и ей подобных микросхем.

Кратко:

Для ПК - C/C++;
Для МК - ассемблер (для обучения и небольших проектов, типа той же мигалки, также для критических участков кода); С (для более серьезных проектов, либо когда есть желание воспользоваться готовой библиотекой для чего-либо).

Кстати, тот же AVR-GCC генерит довольно приличный и компактный код. Но повторяю - начинать изучать МК надо ТОЛЬКО С АССЕМБЛЕРА (и да, ассемблер х86 тоже хорошо бы знать, хотя бы на уровне mov/out/in), и только потом переходить на С и все остальное.

А Бэйсики, Алгоритмбилдеры и прочую туфту - фтопку. На код, который генерят эти компиляторы, невозможно смотреть без слез. Кстати, это же относится и к CodeVisionAVR. Так что, либо IAR, либо AVR-GCC.

И вообще, любые упрощатели (в частности, автоматические кодогенераторы) можно использовать только тогда, когда четко представляешь, как этого же достичь руками, и можешь при случае поправить код. Иначе в 99% случаев получается быдлокод, а программа приобретает глючность, и служит поводом создания таких тем - viewtopic.php?f=17&t=29144 . Объясняй потом человеку, что это не микроконтроллеры не заслуживают доверия, а программист начинал изучение не с ассемблера, а с какого-нибудь алгоритмбилдера, и на нем же писал систему, что привело к тому, что логика уделывает микроконтроллер. :evil:

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Чт май 27, 2010 21:35:01 
Вымогатель припоя
Аватар пользователя

Карма: 1
Рейтинг сообщений: 2
Зарегистрирован: Пт фев 20, 2009 12:26:26
Сообщений: 540
Рейтинг сообщения: 0
А на мой взгляд начинать обучение стоит с паскаля и лишь после, получив должный уровень програмистской самодисциплины стоит переходить на C/ассемблер.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Чт май 27, 2010 21:55:10 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Цитата:
ИМХО хватит плодить быдлокодеров - не стоит замусоривать мозг Basic'ом
Быдлокодеров хватает на любых языках!
Тут многое от моска зависит, а не от языка!

Цитата:
Лучше сразу изучать С для ПК
Думаете? Это всего лишь ваше ИМХО!

Цитата:
а про реализацию USB (и четких временных интервалов вообще) на бейсике можно просто забыть.
Мой котяра ржал как угорелый после прочтения этих строк! :)))
Вот вам USB HID термометр на бейсике (BASCOM) http://purebasic.mybb.ru/viewtopic.php?id=46
Вы реально не правы!

Цитата:
Под С есть куча библиотек, в частности и реализации USB-HID
Типа под бейсик нет!
Котяра подсталомммммммммм. :)))
Библиотека написана на чистом бейсике (PureBasic)
Прочитайте отзывы. Её даже на сях и шарпе юзали. Вот вам и бейсик!

Цитата:
Кстати, тот же AVR-GCC генерит довольно приличный и компактный код.
Да?
А вы сравнивали коды, созданные с помощью AVR-GCC и FastAVR (бейсик)?
Если нет, то рекомендую это сделать и не писать того, что вы не знаете!

Цитата:
А Бэйсики, Алгоритмбилдеры и прочую туфту - фтопку. На код, который генерят эти компиляторы, невозможно смотреть без слез.
Читайте выше.

Вывод.
Не пишите того, чего не знаете!
И помните, "Бейсик" это лишь название языка, а основные возможности зависят от компилятора и имеющихся библиотек!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Пт май 28, 2010 01:40:04 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
Быдлокодеров хватает на любых языках!


Истинная правда. Только вот чем ниже порог вхождения (и чем терпимее компилятор относится к ошибкам, что, кстати, взаимосвязано), тем их больше...

Цитата:
Это всего лишь ваше ИМХО!


Я где-то утверждал обратное? :wink: Отнюдь не претендуя на истину в последней инстанции, скажу, что я в своей жизни писал на Паскале, Си, Ассемблере, ради интереса ковырял Бейсик, Аду (да, и ее тоже :) ). Интересовался Джавой (правда, когда я вижу SunSpot, у меня начинаются легкие рвотные позывы и появляется навязчивое желание перепрошить его :) ). Были времена, когда я был ярым сторонником Паскаля. :) Но со временем я пришел к озвученной мной позиции - это результат опыта.

Цитата:
Вот вам USB HID термометр на бейсике (BASCOM)


А ничего, что там один модуль на асме написан? :wink: А основная программа на бейсике к нему всего лишь обращается?

Цитата:
Библиотека написана на чистом бейсике


Э, так это либа для ПК. Там точных таймингов и не надо - аппаратура все сделает. Это уже абстракция, тут хоть на Хаскеле пиши... :)))

Цитата:
А вы сравнивали коды, созданные с помощью AVR-GCC и FastAVR (бейсик)?


Давайте устроим простенький контест - я напишу простейший бегущий огонек на С (AVR-GCC) и ассемблере под AVR (с использованием таймера), а Вы на Бейсике в Вашем любимом компиляторе. И сравним ассемблерные листинги... OK? :beer:

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Пт май 28, 2010 09:30:39 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Цитата:
Только вот чем ниже порог вхождения (и чем терпимее компилятор относится к ошибкам, что, кстати, взаимосвязано), тем их больше
Си - компилятор иногда такие ошибки "проглатывает" и даже не "давится"... :(
Найти их бывает не просто!

Цитата:
А ничего, что там один модуль на асме написан?
А ничего что в проекте V-USB тоже присутсвует модуль на асме, отвечающий за работу с USB, а прога на Си лишь обращается к нему?

Цитата:
тут хоть на Хаскеле пиши
Очень интересно на это бы взглянуть. :)))

Цитата:
Давайте устроим простенький контест - я напишу простейший бегущий огонек на С (AVR-GCC) и ассемблере под AVR (с использованием таймера), а Вы на Бейсике в Вашем любимом компиляторе.
Давайте, только где я написал что FastAVR мой любимый компилятор?
Я лишь указал что он создаёт довольно оптимальный код.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Пт май 28, 2010 13:36:44 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
Си - компилятор иногда такие ошибки "проглатывает" и даже не "давится"...


Я имел в виду способность компилятора делать из быдлокода работающую программу. Да, компилятор С проглатывает ошибки. Да только вот скомпилированная программа с ошибками работать не будет, и это заставляет человека искать ошибки и проводить оптимизацию/исправление ошибок, более широко говоря - развиваться и совершенствоваться, углублять понимание. А зачем в чем-то разбираться, когда компилятор в любом случае сделает из тотальной жути что-то работающее?

Итак, начнем. Код простого бегущего огонька на ассемблере.

Код:
;**************************************
;****Device: ATmega48 Clock: 8MHz******
;**************************************

.include "m48def.inc"

.def t=R16
.def LED=R17

.macro outu

.if @0<0x40

  out @0,@1

.else

  sts @0,@1

.endif

.endm

.macro outi

  ldi t,@1
  outu @0,t

.endm

.cseg
.org 0

rjmp RESET      ; Reset Handler
rjmp EXT_INT0   ; IRQ0 Handler
rjmp EXT_INT1   ; IRQ1 Handler
rjmp PCINT0     ; PCINT0 Handler
rjmp PCINT1     ; PCINT1 Handler
rjmp PCINT2     ; PCINT2 Handler
rjmp WDT        ; Watchdog Timer Handler
rjmp TIM2_COMPA ; Timer2 Compare A Handler
rjmp TIM2_COMPB ; Timer2 Compare B Handler
rjmp TIM2_OVF   ; Timer2 Overflow Handler
rjmp TIM1_CAPT  ; Timer1 Capture Handler
rjmp TIM1_COMPA ; Timer1 Compare A Handler
rjmp TIM1_COMPB ; Timer1 Compare B Handler
rjmp TIM1_OVF   ; Timer1 Overflow Handler
rjmp TIM0_COMPA ; Timer0 Compare A Handler
rjmp TIM0_COMPB ; Timer0 Compare B Handler
rjmp TIM0_OVF   ; Timer0 Overflow Handler
rjmp SPI_STC    ; SPI Transfer Complete Handler
rjmp USART_RXC  ; USART, RX Complete Handler
rjmp USART_UDRE ; USART, UDR Empty Handler
rjmp USART_TXC  ; USART, TX Complete Handler
rjmp ADC_CCPL   ; ADC Conversion Complete Handler
rjmp EE_RDY     ; EEPROM Ready Handler
rjmp ANA_COMP   ; Analog Comparator Handler
rjmp TWI        ; 2-wire Serial Interface Handler
rjmp SPM_RDY    ; Store Program Memory Ready Handler
 
EXT_INT0  :
EXT_INT1  :
_PCINT0   :
_PCINT1   :
_PCINT2   :
WDT       :
TIM2_COMPA:
TIM2_COMPB:
TIM2_OVF  :
TIM1_CAPT :
TIM1_COMPB:
TIM1_OVF  :
TIM0_COMPA:
TIM0_COMPB:
TIM0_OVF  :
SPI_STC   :
USART_RXC :
USART_UDRE:
USART_TXC :
ADC_CCPL  :
EE_RDY    :
ANA_COMP  :
TWI       :
SPM_RDY   :

  reti

RESET:
 
  outi SPH,HIGH(RamEnd)
  outi SPL,LOW(RamEnd)

  ldi LED,0x80

  outi DDRB,0xFF

  clr t
  outu TCNT1H,t
  outu TCNT1L,t
  outi OCR1AH,0x3D
  outi OCR1AL,0x09
  outi TIMSK1,1<<OCIE1A
  outi TCCR1B,(1<<CS11) | (1<<CS10)

  sei

LOOP:

  rjmp LOOP

TIM1_COMPA:

  clr t
  outu TCNT1H,t
  outu TCNT1L,t

  ror LED
  outu portB,LED

  reti


Компилируем:

Код:
AVRASM: AVR macro assembler 2.1.17 (build 435 Apr 10 2008 09:27:55)
Copyright (C) 1995-2008 ATMEL Corporation

D:\mc\prj\asm\experiment\experiment.asm(5): Including file 'C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m48def.inc'
D:\mc\prj\asm\experiment\experiment.asm(116): No EEPROM data, deleting D:\mc\prj\asm\experiment\experiment.eep

ATmega48 memory use summary [bytes]:
Segment   Begin    End      Code   Data   Used    Size   Use%
----------
[.cseg] 0x000000 0x00007a    122      0    122    4096   3.0%
[.dseg] 0x000100 0x000100      0      0      0     512   0.0%
[.eseg] 0x000000 0x000000      0      0      0     256   0.0%

Assembly complete, 0 errors. 0 warnings


3% памяти ATmega48...

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Последний раз редактировалось YS Пт май 28, 2010 16:30:35, всего редактировалось 4 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Пт май 28, 2010 14:13:04 
Потрогал лапой паяльник

Зарегистрирован: Вс мар 30, 2008 14:31:51
Сообщений: 331
Рейтинг сообщения: 0
Бегущий огонёк на FastAVR.

Код на бейсике.
Код:
'/////////////////////////////////////////////////////////
'///   FastAVR Basic Compiler for AVR by MICRODESIGN   ///
'/////////////////////////////////////////////////////////
$Device= m8             ' ATmega8
$Stack = 32            ' Глубина стека
$Clock = 8.000000      ' Тактовая частота - 8 МГц.
Declare Interrupt Ovf1()
Dim Led As Byte
Led = 1
DDRD=&hFF
PORTD=1

$Timer1=Timer , Prescale=64
Enable Ovf1
Enable Interrupts
Start Timer1

Do                  ' place your code in next line
Loop

Interrupt Ovf1()
 Rotate(Left, 1, Led)
 PORTD=Led
End Interrupt


Это выдало при компиляции
Код:
;FastAVR Basic Compiler, ver.4.3.0, by MicroDesign
;Created 13:59:52, 28-05-2010
;
.include   "C:\Program Files\FastAVR\inc\m8def.inc"
;
      .DSEG
led:               .byte    1
      
      .CSEG
.ORG   0x0000
      rjmp   _Reset
.ORG      INT0addr
      reti
.ORG      INT1addr
      reti
.ORG      OC2addr
      reti
.ORG      OVF2addr
      reti
.ORG      ICP1addr
      reti
.ORG      OC1Aaddr
      reti
.ORG      OC1Baddr
      reti
.ORG      OVF1addr
      rjmp   IntN8

_Reset:
      ldi      yl,byte1(RAMEND)
      out      SPL,yl
      ldi      yh,byte2(RAMEND)
      out      SPL+1,yh
      sbiw   yl,32

;******   USERS BASIC CODE **********************

;-Line--0009----Led = 1--
      ldi      zl,byte1(1)
      sts      led,zl

;-Line--0010----DDRD=&hFF--
      ldi      zl,byte1(255)
      out      DDRD,zl

;-Line--0011----PORTD=1--
      ldi      zl,byte1(1)
      out      PORTD,zl

;-Line--0013----$Timer1=Timer , Prescale=64--

;-Line--0014----Enable Ovf1--
      in      zl,TIMSK
      sbr      zl,0x04
      out      TIMSK,zl

;-Line--0015----Enable Interrupts--
      sei

;-Line--0016----Start Timer1--
      in      zl,TCCR1B
      sbr      zl,3
      out      TCCR1B,zl

;-Line--0018----Do                  ' place your code in next line--
L0000:

;-Line--0019----Loop--
      rjmp   L0000
L0001:

;-Line--0021----Interrupt Ovf1()--

;-Line--0022----Rotate(Left, 1, Led)--
IntN8:
      in      r2,SREG
      lds      zl,led
      ldi      r24,1
      Call   _RotBL
      sts      led,zl

;-Line--0023----PORTD=Led--
      lds      zl,led
      out      PORTD,zl

;-Line--0024----End Interrupt--
      out      SREG,r2
      reti

;****** END OF USER BASIC CODE ****************


;////// RotateLeftByte ////////////////////
_RotBL:   lsl      zl
      brcc   _RtBL1
      sbr      zl,1
_RtBL1:   dec      r24
      brne   _RotBL
      ret

;System Global Variables: 0  bytes
;User   Global Variables: 1  bytes


Использовано 1.2 % памяти ATmega8.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: программа оболочка для win и программирование
СообщениеДобавлено: Пт май 28, 2010 17:32:51 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
Использовано 1.2 % памяти ATmega8.


Цифра, конечно, красивая, но:

1. У ATmega8 меньше прерываний, что дает выигрыш в суммарном объеме кода за счет меньшей ТВП;
2. У ATmega8 8K Flash, а у ATmega48 - 4K. Очевидно, объем кода в процентах будет меньше.
3. Вы использовали прерывание по переполнению, что, опять же, дало выигрыш в несколько команд на инициализации.

:wink:

Несколько замечаний по ассемблерному листингу, полученному из программы на бейсике:

1. Программа использует оперативную память, что в таком простом случае явно излишне.
2. Прокомментирую листинг:

Код:
;FastAVR Basic Compiler, ver.4.3.0, by MicroDesign
;Created 13:59:52, 28-05-2010
;
.include   "C:\Program Files\FastAVR\inc\m8def.inc"
;
      .DSEG
led:               .byte    1           [color=red];заводим переменную в оперативной памяти, избыточность[/color]
     
      .CSEG
.ORG   0x0000
      rjmp   _Reset
.ORG      INT0addr
      reti
.ORG      INT1addr
      reti
.ORG      OC2addr
      reti
.ORG      OVF2addr
      reti
.ORG      ICP1addr
      reti
.ORG      OC1Aaddr
      reti
.ORG      OC1Baddr
      reti
.ORG      OVF1addr
      rjmp   IntN8

_Reset:
      ldi      yl,byte1(RAMEND)
      out      SPL,yl
      ldi      yh,byte2(RAMEND)
      out      SPL+1,yh
      sbiw   yl,32

;******   USERS BASIC CODE **********************

;-Line--0009----Led = 1--
      ldi      zl,byte1(1)
      sts      led,zl                      [color=red]; из-за того, что переменная заведена в памяти, для каждого обращения к ней требуется две инструкции[/color]

;-Line--0010----DDRD=&hFF--
      ldi      zl,byte1(255)
      out      DDRD,zl

;-Line--0011----PORTD=1--
      ldi      zl,byte1(1)
      out      PORTD,zl

;-Line--0013----$Timer1=Timer , Prescale=64--

;-Line--0014----Enable Ovf1--
      in      zl,TIMSK   [color=red]; бесполезная инструкция[/color]
      sbr      zl,0x04
      out      TIMSK,zl

;-Line--0015----Enable Interrupts--
      sei

;-Line--0016----Start Timer1--
      in      zl,TCCR1B          [color=red]; бесполезная инструкция[/color]
      sbr      zl,3
      out      TCCR1B,zl

;-Line--0018----Do                  ' place your code in next line--
L0000:

;-Line--0019----Loop--
      rjmp   L0000
L0001:

;-Line--0021----Interrupt Ovf1()--

;-Line--0022----Rotate(Left, 1, Led)--
IntN8:
      in      r2,SREG     [color=red];бесполезная инструкция[/color]
      lds      zl,led
      ldi      r24,1
      Call   _RotBL        [color=red]; теряем время на вызове процедуры[/color]
      sts      led,zl

;-Line--0023----PORTD=Led--
      lds      zl,led
      out      PORTD,zl

;-Line--0024----End Interrupt--
      out      SREG,r2     [color=red];бесполезная инструкция[/color]
      reti

;****** END OF USER BASIC CODE ****************


;////// RotateLeftByte ////////////////////
_RotBL:   lsl      zl               [color=red]; вся эта жуть по-хорошему заменяется командами ROR/ROL. Неоптимальный код.[/color]
      brcc   _RtBL1
      sbr      zl,1
_RtBL1:   dec      r24
      brne   _RotBL
      ret

;System Global Variables: 0  bytes
;User   Global Variables: 1  bytes


Продолжаем. :) Код на С:

Код:
#include <avr/io.h>
#include <avr/interrupt.h>

volatile register unsigned char LED asm("r16");

ISR (TIMER1_COMPA_vect)
{
  TCNT1=0;
 
  PORTB=LED;
 
  LED=LED>>1;
  if (LED==0)
    LED=0x80;
}

void main(void)
{
  DDRB=0xFF;
  TCNT1=0;
  OCR1A=0x3D09;
  TIMSK1=1<<OCIE1A;
  LED=0x80;
  TCCR1B=(1<<CS11) | (1<<CS10);
  sei();

  while (1);
}


Компилируем:

Код:
rm -rf expgcc.o  expgcc.elf dep/* expgcc.hex expgcc.eep expgcc.lss expgcc.map
Build succeeded with 0 Warnings...
avr-gcc.exe  -mmcu=atmega48 -Wall -gdwarf-2 -std=gnu99 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT expgcc.o -MF dep/expgcc.o.d  -c  ../expgcc.c
../expgcc.c:17: warning: return type of 'main' is not 'int'
avr-gcc.exe -mmcu=atmega48 -Wl,-Map=expgcc.map expgcc.o     -o expgcc.elf
avr-objcopy -O ihex -R .eeprom  expgcc.elf expgcc.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex expgcc.elf expgcc.eep || exit 0
avr-objdump -h -S expgcc.elf > expgcc.lss

AVR Memory Usage
----------
Device: atmega48

Program:     196 bytes (4.8% Full)
(.text + .data + .bootloader)

Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)


Build succeeded with 1 Warnings...


Дизассемблированный код:

Код:
+00000000:   C019        RJMP    PC+0x001A        Relative jump
+00000001:   C033        RJMP    PC+0x0034        Relative jump
+00000002:   C032        RJMP    PC+0x0033        Relative jump
+00000003:   C031        RJMP    PC+0x0032        Relative jump
+00000004:   C030        RJMP    PC+0x0031        Relative jump
+00000005:   C02F        RJMP    PC+0x0030        Relative jump
+00000006:   C02E        RJMP    PC+0x002F        Relative jump
+00000007:   C02D        RJMP    PC+0x002E        Relative jump
+00000008:   C02C        RJMP    PC+0x002D        Relative jump
+00000009:   C02B        RJMP    PC+0x002C        Relative jump
+0000000A:   C02A        RJMP    PC+0x002B        Relative jump
+0000000B:   C02A        RJMP    PC+0x002B        Relative jump
+0000000C:   C028        RJMP    PC+0x0029        Relative jump
+0000000D:   C027        RJMP    PC+0x0028        Relative jump
+0000000E:   C026        RJMP    PC+0x0027        Relative jump
+0000000F:   C025        RJMP    PC+0x0026        Relative jump
+00000010:   C024        RJMP    PC+0x0025        Relative jump
+00000011:   C023        RJMP    PC+0x0024        Relative jump
+00000012:   C022        RJMP    PC+0x0023        Relative jump
+00000013:   C021        RJMP    PC+0x0022        Relative jump
+00000014:   C020        RJMP    PC+0x0021        Relative jump
+00000015:   C01F        RJMP    PC+0x0020        Relative jump
+00000016:   C01E        RJMP    PC+0x001F        Relative jump
+00000017:   C01D        RJMP    PC+0x001E        Relative jump
+00000018:   C01C        RJMP    PC+0x001D        Relative jump
+00000019:   C01B        RJMP    PC+0x001C        Relative jump
+0000001A:   2411        CLR     R1               Clear Register
+0000001B:   BE1F        OUT     0x3F,R1          Out to I/O location
+0000001C:   EFCF        SER     R28              Set Register
+0000001D:   E0D2        LDI     R29,0x02         Load immediate
+0000001E:   BFDE        OUT     0x3E,R29         Out to I/O location
+0000001F:   BFCD        OUT     0x3D,R28         Out to I/O location
+00000020:   E011        LDI     R17,0x01         Load immediate
+00000021:   E0A0        LDI     R26,0x00         Load immediate
+00000022:   E0B1        LDI     R27,0x01         Load immediate
+00000023:   ECE4        LDI     R30,0xC4         Load immediate
+00000024:   E0F0        LDI     R31,0x00         Load immediate
+00000025:   C002        RJMP    PC+0x0003        Relative jump
+00000026:   9005        LPM     R0,Z+            Load program memory and postincrement
+00000027:   920D        ST      X+,R0            Store indirect and postincrement
+00000028:   30A0        CPI     R26,0x00         Compare with immediate
+00000029:   07B1        CPC     R27,R17          Compare with carry
+0000002A:   F7D9        BRNE    PC-0x04          Branch if not equal
+0000002B:   E011        LDI     R17,0x01         Load immediate
+0000002C:   E0A0        LDI     R26,0x00         Load immediate
+0000002D:   E0B1        LDI     R27,0x01         Load immediate
+0000002E:   C001        RJMP    PC+0x0002        Relative jump
+0000002F:   921D        ST      X+,R1            Store indirect and postincrement
+00000030:   30A0        CPI     R26,0x00         Compare with immediate
+00000031:   07B1        CPC     R27,R17          Compare with carry
+00000032:   F7E1        BRNE    PC-0x03          Branch if not equal
+00000033:   D018        RCALL   PC+0x0019        Relative call subroutine
+00000034:   C02B        RJMP    PC+0x002C        Relative jump
+00000035:   CFCA        RJMP    PC-0x0035        Relative jump
@00000036: __vector_11
---- expgcc.c ----------
7:        {
+00000036:   921F        PUSH    R1               Push register on stack
+00000037:   920F        PUSH    R0               Push register on stack
+00000038:   B60F        IN      R0,0x3F          In from I/O location
+00000039:   920F        PUSH    R0               Push register on stack
+0000003A:   2411        CLR     R1               Clear Register
+0000003B:   938F        PUSH    R24              Push register on stack
8:          TCNT1=0;
+0000003C:   92100085    STS     0x0085,R1        Store direct to data space
+0000003E:   92100084    STS     0x0084,R1        Store direct to data space
10:         PORTB=LED;
+00000040:   2F80        MOV     R24,R16          Copy register
+00000041:   B905        OUT     0x05,R16         Out to I/O location
12:         LED=LED>>1;
+00000042:   9586        LSR     R24              Logical shift right
+00000043:   2F08        MOV     R16,R24          Copy register
13:         if (LED==0)
+00000044:   F409        BRNE    PC+0x02          Branch if not equal
14:           LED=0x80;
+00000045:   E800        LDI     R16,0x80         Load immediate
15:       }
+00000046:   918F        POP     R24              Pop register from stack
+00000047:   900F        POP     R0               Pop register from stack
+00000048:   BE0F        OUT     0x3F,R0          Out to I/O location
+00000049:   900F        POP     R0               Pop register from stack
+0000004A:   901F        POP     R1               Pop register from stack
+0000004B:   9518        RETI                     Interrupt return
@0000004C: main
18:       {
+0000004C:   EF8F        SER     R24              Set Register
+0000004D:   B984        OUT     0x04,R24         Out to I/O location
20:         TCNT1=0;
+0000004E:   92100085    STS     0x0085,R1        Store direct to data space
+00000050:   92100084    STS     0x0084,R1        Store direct to data space
21:         OCR1A=0x3D09;
+00000052:   E089        LDI     R24,0x09         Load immediate
+00000053:   E39D        LDI     R25,0x3D         Load immediate
+00000054:   93900089    STS     0x0089,R25       Store direct to data space
+00000056:   93800088    STS     0x0088,R24       Store direct to data space
22:         TIMSK1=1<<OCIE1A;
+00000058:   E082        LDI     R24,0x02         Load immediate
+00000059:   9380006F    STS     0x006F,R24       Store direct to data space
24:         TCCR1B=(1<<CS11) | (1<<CS10);
+0000005B:   E083        LDI     R24,0x03         Load immediate
+0000005C:   93800081    STS     0x0081,R24       Store direct to data space
25:         sei();
+0000005E:   9478        SEI                      Global Interrupt Enable
+0000005F:   CFFF        RJMP    PC-0x0000        Relative jump
+00000060:   94F8        CLI                      Global Interrupt Disable
+00000061:   CFFF        RJMP    PC-0x0000        Relative jump


4.8% памяти ATmega48. Как видно, ассемблер существенно эффективнее высокоуровневых языков. Поэтому его целесообразно использовать для небольших проектов, где выигрыш в объеме кода существенен.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Последний раз редактировалось YS Пт май 28, 2010 18:29:15, всего редактировалось 1 раз.

Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 72 ]    , 2, ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y