На чем писать  

536 пользователей проголосовало

  1. 1. Что чаще используете в разработках?

    • Assembler
      148
    • C
      271
    • Что-то еще
      56


354 сообщения в этой теме

GiG    5

Лорд вот тут ты не прав!!

А асм пишутся аббалденные приложения. Ты просто не видел, это настоящии шедевры!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
Tesla    45

Решил я на днях написать программку под attiny2313 (2 кбайта). Начал писать и отлаживать на C и с удивлением обнаружил, что не достигнув и половины первоначальной задумки, код превысил все 2 кбайта. Тогда я попробовал переписать её частично на ассемблере, и обнаружил, что переписанные функции "сдулись" по объёму в 10-15 раз! А чтобы не быть голословным, приведу пример:

C (244 байта):

void fillDisplay(unsigned char s) {
 int i;
 for(i = 0; i < 8; i++) {
display[i] = s;
 }
}

ASM (12 байтов):

.global	   fillDisplay
fillDisplay:  ldi r26,(display)
		  ldi r16, 8
loop1:		st X+, r24
		  dec r16
		  brne loop1
		  ret

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Jozef    0
Начал писать и отлаживать на C и с удивлением обнаружил, что не достигнув и половины первоначальной задумки, код превысил все 2 кбайта. Тогда я попробовал переписать её частично на ассемблере, и обнаружил, что переписанные функции "сдулись" по объёму в 10-15 раз!

а оптимизация на каком была уровне настроена?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Tesla    45

Обнаружил, что на -O0 :) Переставил на -Os, код уменьшился почти в два раза. Гораздо лучше, но до ассемблера всё равно далековато... Или можно ещё что-то сделать?

Кстати, как можно посмотреть ассемблерный код, получающийся после компиляции с C? (работаю в AVR Studio 4 + WinAVR)

Изменено пользователем Tesla

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
alts    1

Стеб насчет Билдера не уместен!!!Идея кстати сказать очень даже хорошая!А насчет "на русском писать"- было такое но очень давно...Попытка сделать язык не на инглише, а на русском.И кое какие предприятия тогда еще СССР Это даже реализовали...Правда не как ЯВУ а какой то интерфейс программный.Так что все новое - это хорошо забытое старое!

Билдер надо дорабатывать.Это очевидно.Но то, что по наглядности текста программы как такового он круче любого другого отладчика - это факт! Хотя бы потому-что практически приближен к принципиальным основам построения алгоритмов.А точнее это и есть по сути сам алгоритм!Можно конечно многое еще улучшить - и разработчики эти пожелания учитывают!Представляется мне что недалек тот день когда и Си и что нибудь еще будет о-о-о-чень похоже на Билдер...Только команды не Ассемблерные а от другого языка.Точнее их мнемоника...

  • Не одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
yura_sobko    0

Я пишу на Асемблере. Прошивка намного меньшего размера. А С я терпеть не могу. Я считаю что на Асемблере писать намного проще. Также пробовал писать на Algoritm Builder немного легче чем на Асме. но я пишу всеравно на Асме.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Harbinger    0

ASM преобладает (51, немного знаком и с AVR). Тому своя специфика - работаю в основном с "управлялками". Хотя для работы с текстовым интерфейсом (скажем, работа с модемами), не говоря уже о вычислениях - ЯВУ куда удобнее. Последний "проект выходного дня" пишу в Кейле ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Aeore    0

Хе-хеее... Господа! Вообще-то, рулит паскаль.. да нет его нормального для микроконтроллеров. Что же касается ассемблера - знать его необходимо. Знание камня приходит с изучения ассемблера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Lexi    1

Доброго времени всем!!!

Лично я пишу на Си для PIC. Но втоже время знаю и АСМ для пиков, MCS-51, c языком для авр ознакомился. Если надо вставляю асемблерную ставку (но как правило этого я не делаю). По поводу того, что програмисты "зажрались" - ответ бред. Если мне надо перенести девайс на другой камень, то я просто меняю библиотеку для МК. Тем более, что в последствии по барабану для чего писать PIC или AVR или для еще чего-нить))).

  • Не одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
ReAlAl    0
Обнаружил, что на -O0 :) Переставил на -Os, код уменьшился почти в два раза. Гораздо лучше, но до ассемблера всё равно далековато... Или можно ещё что-то сделать?

Кстати, как можно посмотреть ассемблерный код, получающийся после компиляции с C? (работаю в AVR Studio 4 + WinAVR)

Сначала по по последнему вопросу - в опциях проекта на страничке general есть галочки - generate hex file, generate map file, generate list file

list file ( projectname.lss ) - это дизассемблированная прошивка с вставленными строками исходного текста.

Теперь по основному вопросу

Вероятно, сравниватется что-то не то с чем-то не тем. Ну не может одна такая простая функция дасть сотни байт кода.

#include <stdint.h>

#define DISP_SIZE 8

uint8_t display[DISP_SIZE];

void fillDisplay(uint8_t s)
{
for( uint16_t i = 0; i < DISP_SIZE; i++)
	display[i] = s;
}

avr-gcc --version

avr-gcc (GCC) 4.1.2 (WinAVR 20070525)

avr-gcc -O2 -S -mmcu=attiny13 fill.c

получаем fill.s

fillDisplay:
ldi r30,lo8(display)
ldi r31,hi8(display)
.L2:
st Z+,r24
ldi r25,hi8(display+8)
cpi r30,lo8(display+8)
cpc r31,r25
brne .L2
ret

Да, длиннее, чем оптимальный асмовый вариант, но не в разы, 8 команд против 6. Да и то - потому, что gcc не учитывает "мелкоту" этой тини2313 и использует полный указатель r31:r30, т.е. если теперь на асме написать для какой-нибудь меги88, где нужен 16-битный указатель, то "перерасход" станет уже не 8 против 6, а 8 против 7, т.е. на уровне 15%. Где-то такой перерасход - меньше 20% - и будет на больших программах.

С временем выполнения хуже, это да.

А те сотни байт, вероятно, это заполненная таблица прерываний, очистка секции .bss (зануление неинициализированных переменных), инициализация секции .data (копирование значений инициализированных переменных из флеша в ОЗУ) и ещё всякие служебные вещи. С ростом программы они не увеличиваются.

Изменено пользователем ReAlAl

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
SaKV    1

Язык С/С++ это язык высокого уровня. Я программирую микроконтроллеры на С. Так как это очень просто и быстро. А на Асемблере программировать-это прошлый век.

  • Не одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
alts    1

Доброго дня господа!(или ночи...) Вопросы объема кода вообще на данный момент считаю некорректными, ибо объмы памяти программ в кристаллах таковы,что использовать их полностью довольно трудно.Если конечно не ставится задача сделать "супер вупер колбасу" на каком нибудь 2313-ом.Каждая задача(сколько-нибудь серьезная) требует своего кристалла. А так при желании можно и "в трех местах сломать" :) Не надо пытаться сделать графический контроллер на ATTiny. Просто как пример читаем в даташите (фирменном конечно) ДЛЯ ЧЕГО сей кристалл проектировался. Там написано - игрушки. ВСЕ! Для графики берем что-нибудь из Мег, да и то с опаской...

И вообще рассуждать на тему откомпилированного кода нужно помятуя о том что есть разные конторы и разные компиляторы.Просто какие-то доступны радиолюбителям, а какие-то стоят много иностранных денег.Вторые пакуют код так, что разницу в плюс минус 20-30 слов между Си и Асм можно считать пренебрежимо малой. Первые как правило похуже...

Вопросы по математике так же можно решать разными способами. Тут считаю нет догмы что лучше. Да и разрядность ни при чем.Правило - чем больше точность(а соответственно разрядность)- тем меньше скорость выполнения вычисления в целом одинаково бьет по быстродействию что в Си что в Асме. С той лишь разницей что если вы в математике вообще ни бум-бум то тут конечно предпочтительнее Си.Да и то не всем помогает. А если представляете как все эти числа можно обработать, то Асм.Возможности по оптимизации процесса вычисления выше.Только и всего...:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
knyaz*    0

Я предпочитаю Си...

1. Некогда не учил Ассемблер...

2. Учу в универе Си/С++...

3. Лень лишний раз напрягать голову...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Zer    522

А напрасно. Отупеть можно, если не напрягать... Да и понятне с АСМа всё будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
domowoj    1

Со времен i8080 пишу на asm.Потом 8085,mcs51,AVR.

Меняются времена, меняюся методы.

Все зависит от задачи, кристалла, нужно использовать все преимущества

asm или ЯВУ.

Не понимаю категоричных товарищей, отвергающих то или иное.

Инструмента не бывает мало!!!

Изменено пользователем domowoj
  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
GiG    5

rw_1ware:

ldi _tmp1,8 ;bit data counter

rw_lab:

cli ;disabled interrupt

SBI _com_port-1,_ds18_line ;1_ware-->0 ,0mks

nop ;time for set log0

sbrc _tmp,0 ;if write log 0

CBI _com_port-1,_ds18_line ;1_ware-->1

ldi _tmp2,4 ;

dely_rw:

dec _tmp2

brne dely_rw

lsr _tmp ;next bit

andi _tmp,$7F

sbic _com_port-2,_ds18_line ;if 1_ware=0 skipe ,18mks

ori _tmp,$80

ldi _tmp2,$0D

dely_rw1:

dec _tmp2

brne dely_rw1

CBI _com_port-1,_ds18_line ;1_ware-->1

sei ;~60mks end slot

dec _tmp1

brne rw_lab ;next bit

ret

вот универсальная подпрограмма чтения записи байта по 1ware напишите мне на C чтонить подобное

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
TWIN    2

Странные "выпады" в сторону ЯВУ... Честно! Я уверен в том, что подобное могут сказать люди, которые не понимают РЕАЛЬНОЙ пользы от объектно ориентированной модели программирования!

Не вижу смысла в высказываниях что лучше, а что хуже - все зависит от поставленной задачи. Если можно решить ее эффективно на С, ее нужно решать на С, если однозначно необходим АСМ - тогда конечно!

А то вас тут, извините, читают начинающие, могут сделать выводы неправильные! Для профессионалов подобные споры, по-моему, вообще неуместны...

С уважением.

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
GiG    5

TWIN

А то вас тут, извините, читают начинающие, могут сделать выводы неправильные! Для профессионалов подобные споры, по-моему, вообще неуместны...

правильные выводы нада делать, спор идёт о эффективности использования и оптимальности кода.

А на предыдуший пост так ни кто и не ответил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Deus-ex    0

Здравствуйте, подскажите пжл как откомпилировать данные исходники для mega32, покуда я понял они написаны на CodeVisionAVR, но там вроде нужен еще prj'ект файл,может там какая-нить другая программа используется ..

ish.rar

Изменено пользователем Deus-ex

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Mak_Valera    0
НУ вот уж точно не ограничения!! Ассемблер как раз и раздвигает "граници дозволенного" .

А алгоритм билдер )).....

Ты б ещё на руском языке писал к примеру

А что, хорошая идея. Давайте напишем русский компилятор! Я думаю там будет около 5 слов :D и работать будет не хуже ASM. :wacko: Я пишу больше на АСМе. С - безусловно хороший компилятор. А мне АСМ больше нравится. Там все прозрачно. А тем кто не хочет парится с изучением Ассемблера, хочу сказать, что он намного проще любого языка высокого уровня. Единственный его недостаток - это что нужно сначала "выучить микроконтроллер" перед тем как писать для него программу. Но это скорее конечно достоинство, чем недостаток. На С тоже если не разобраться с архитектурой и регистрами ничего хорошего не получится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

да какая вообще разница на чем писать, ГЛАВНОЕ- ЧТО Б УСТРОЙСТВО ПРАВИЛЬНО ВЫПОЛНЯЛО СВОИ ФУНКЦИИ, а если чтото будет работать не очень быстро, то все равно на асме надо будет писать. Короче все зависит от положеной задачи: ктото винду в контроллер пытается установить, а кто-то просто гирлянды делать :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Krik99    0

Вообще если размер не волнует, то можно писать на Си... Я щитаю что надо знать и асм и Си, так как исходники можно переводить с одного на другой язык, а воще знаю только Си, и хочу выучить асм. Говрят пишут на Си под PIC, если не сложно пделитесь компилятором. :)

Изменено пользователем Krik99

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: myrka
      Доброго дня! 
      Купил на барахолке вот такую плату





      на последней фото 2 черных провода в дальнейшем соединены 
      Это бегущая строка от игровых автоматов, на ней 2-мя цветами отображаются слоганы, хочу перепрошить в целях обучения.
      Вопросы:
      1) встречал ли кто-то описание этой микросхемы? (я в интернете не нашел, потратил 2 дня)
      2) есть на микросхеме разъем (10 ножек хорошо видно на последнем фото), как узнать их имена, за что отвечает каждая ножка? (есть некоторые предположения, но сомневаюсь в них)
      3) можно ли через CP2102-USB-UART-MODULE перепрошить вот эту микросхему, если да то как соединить?
    • Автор: Atreides
      Добрый день. Мне требуется реализовать программный юарт на атмеге16. Он нужен для того, чтобы принятые по нему данные отправить на аппаратный юарт. В интернете нашел примеры кода, но понять его мне трудно. Прошу вас словами в общих чертах объяснить принцип реализации программного юарта. Буду рад примерам, которые, на ваш взгляд, являются наиболее простыми и понятными. Заранее спасибо.
    • Автор: EugenArt
      Всем доброго времени суток!
      в поиске не смог найти инфо, поэтому создал тему, не ругайте, если ошибся с веткой.
      Идея следующая, есть автомагнитола deh-3600MP c выходом Ip-bus.Хочу подружить магнитофон с мп3 плеером (есть от фм-трансмиттера, завтра куплю платку отдельного мп3). Сразу подчеркну, что хочу управление плеером (треки, теги, пауза и т.д) с головного устройства.
      предполагаю схему так:  ip-bus - avr - mp3 player.
      алгоритм avr-mp3 несложен и открыт, а вот описание протокола ip-bus нигде нет, форум витат.спб уже изучил, есть кусок кода работы авр и ip-bus, но не очень понятно, может подскажете набор команд ip-bus или что происходит по событию нажатию кнопки вперед/назад.
      Заранее благодарен.
    • Автор: Максим Окатов
       
      Товарищи, помогите пожалуйста. Данная програмулина при нажатии на кнопку входит в функцию MinU() в которой инициализирует таймер для задержки(ждем отпустит пользователь кнопку или нет) если кнопка не отпущена то уменьшаем скважность ШИМ.
      проблема в выделенной красным строчке! когда count больше 3 уменьшаем скважность, но в отладчике AVR studio, Proteus и в железе не робит.
      Перепрыгивает действие в {} так будь-то условие не выполнено...
      #define F_CPU 1000000L
      #include <avr/io.h>
      #include <avr/interrupt.h>
      #include <util/delay.h>
      unsigned char count = 0;
      unsigned char a=5,s=3,b=0;
          //===================================Насройка таймера====================
      void Timer_ini(void){
         TCCR1B = (1<<CS12)|(0<<CS11)|(0<<CS10);
         TCNT1 = 65535-976;
         TIMSK |= (1<<TOIE1);
         count = 0;
        }
          //===========================настройка шим===========================
      void PWM_ini(void){
         ASSR=0x00;
         TCCR2=0b01101110; //На выводе OC1A единица, когда OCR1A==TCNT1, восьмибитный ШИМ
         OCR2=200;
      }
      //===============
      void MinU(){
          unsigned char i=0;
          Timer_ini();
          while (!(PINB&0b00000010)){
              if(count>2){        //Если таймер считал более двух раз
                _delay_ms(100); // ждем 100 мс
                OCR2--; // Уменьшаем скважность
                i=1;        // были в плавном уменьшении
            }
            
         }
         if (i!=1) // если не были в плавном уменьшении
         {
             OCR2=OCR2-50;
             i=0;
         }
      }
              //=======================================================
      int main(void)
          {
             
              // Настраиваем порт D на выход
              DDRB = 0b00001000;
              PWM_ini();
              //Timer_ini();
              sei();
              
              
              while(1)
              {
                  b=a-s;
                  if (!(PINB&0b00000010))
                  {
                      MinU();
                  }/*
                  //if (!(PINB&0b00000100))
                  //{
                      //PlsU();
                  //}*/
              }
              return 0;
          }
          
          ISR (TIMER1_OVF_vect)
          {
              count++;
              TCNT1 = 65535-976;
                  }
       
       
       
    • Автор: Serg_Mang
      Можно ли залить в arduino прошивку, предназначенную для чистого AVR?