Страница 3 из 3

Re: Возможно без знакомства с ассемблером освоить Си?

Добавлено: Пт янв 13, 2012 08:30:28
BOB51
МитяРа, я ж не про "стандартную мелкоту" .... мобильник - тоже вроде МК, да и другого "зверья" полно... досадка... ведь не только творчеством заниматься приходится...
скоро среднепакостные миниПК (или микроПК) расплодятся как нынешние микрухи - а там уже работа под управлением какой-нибудь очередной "форточки", которая меняется каждые 2-3 года!
стабильно тиражируются разве что "периферийные" ИС в качестве базовой ячейки для мелких приложений...
у PICов и AVRок вроде как тоже некоторая преемственность имеется, НО и те и другие только один производитель выпускает - не дай боже какой природный катаклизма или "поглощение/слияние" и ... :shock:
армы/кортексы пока в стадии "неопределенного роста" - там еще лет пять модели меняться будут - скорее всего в направлении "система на кристалле" - это уж точно под языки высокого уровня подгоняться будет (и "троянского коня" впридачу для потенциально проблемного потребителя впихнут в обязательном порядке)
грустно...
поползу лучше над концептом программулины к таймеру морочится - хош тоже "для себя" и "в стол" - но хоть мозги потренирую, да и ностальжи... :beer:
для hybroid
понятно, что у асма и С разный подход,
однако если асм освоен в полной мере - то там произойдет такой же переход сознания - работа с библиотеками, макросами и сложными конструкциями - дальше только найти "ключик" к освоению С (диалектов у которого не меньше, чем у асмов)
и все же в выигрыше будет тот, кто знает в совершенстве и асм и С и создание программ в ПК под "форточки" :beer:

Re: Возможно без знакомства с ассемблером освоить Си?

Добавлено: Пт янв 13, 2012 08:59:33
Satyr
BOB51 писал(а): армы/кортексы пока в стадии "неопределенного роста" - там еще лет пять модели меняться будут
:))) :)))

Это не этап "неопределенного роста", а нормальный цикл развития. Вот PIC и AVR - практически дохлые, а эти развиваются. И последние 15 лет "менялись" и дальше будут только "меняться" -)))

Re: Возможно без знакомства с ассемблером освоить Си?

Добавлено: Пт янв 13, 2012 09:00:15
ploop
Мож кто сделает еще лучше руками на асме?
Без прелюдий:

Код: Выделить всё

    ; В R16 передаваемый байт
    ldi r17,8
    loop:
      cbi port,bit
      rol r16
      brcc l1                   
        sbi ds_port,ds_bit 
      l1:
      dec r17
      brne loop
Код для сдвигового регистра. Подразумевается, что должен быть импульс перед зацикливанием, поэтому cbi без условий.

Вариант 2:

Код: Выделить всё

    ldi r17,8
    loop:
      sbrc r16,(1<<0)
      cbi port,bit
      sbrs r16,(1<<0)
      sbi ds_port,ds_bit 
      rol r16
      dec r17
      brne loop

Re: Возможно без знакомства с ассемблером освоить Си?

Добавлено: Пт янв 13, 2012 10:38:29
BCluster
У Си диалектов нет, там есть стандарт. Отличаются только названия регистров у МК. Их инициализация и прочее. Сам язык один и тот же.
В некоторых компиляторах вводятся дополнительные фишки - типа PORTB.1 в CVAVR - но если ты не знаешь их ты можешь использовать стандартный подход.

Re: Возможно без знакомства с ассемблером освоить Си?

Добавлено: Пт янв 13, 2012 10:42:21
ploop
дополнительные фишки
А они, случайно, не описаны теми же макросами, или еще чем-нибудь? К языку они вроде-бы отношения не имеют...

Re: Возможно без знакомства с ассемблером освоить Си?

Добавлено: Пт янв 13, 2012 10:51:05
phanis
Если не трудно, объясните пожалуйста как сделана битовая операция PORTB.1 в кодевижине.. В ИАР -е так

Код: Выделить всё

/*========*/
/* Predefined SFR Addresses */
/*========*/

/****************************************************************************
 * An example showing the SFR_B() macro call, 
 * the expanded result and usage of this result:
 *
 * SFR_B(AVR,   0x1F) Expands to:
 * __io union {
 *             unsigned char AVR;                 // The sfrb as 1 byte
 *             struct {                           // The sfrb as 8 bits
 *                     unsigned char AVR_Bit0:1,
 *                                   AVR_Bit1:1,
 *                                   AVR_Bit2:1,
 *                                   AVR_Bit3:1,
 *                                   AVR_Bit4:1,
 *                                   AVR_Bit5:1,
 *                                   AVR_Bit6:1,
 *                                   AVR_Bit7:1;
 *                    };
 *            } @ 0x1F;
 * Examples of how to use the expanded result:
 * AVR |= (1<<5);
 * or like this:
 * AVR_Bit5 = 1;
 ***************************************************************************/

Re: Возможно без знакомства с ассемблером освоить Си?

Добавлено: Пт янв 13, 2012 11:13:55
Goodefine
ploop писал(а): Вариант 2:

Код: Выделить всё

    ldi r17,8
    loop:
      sbrc r16,(1<<0)
      cbi port,bit
      sbrs r16,(1<<0)
      sbi ds_port,ds_bit 
      rol r16
      dec r17
      brne loop
На асме я не пишу, потому могу ошибаться, т.к. устойчивых навыков нет, но этот код делает совсем не то что в примере. Если младший байт числа в r16, к примеру, равен 1, то sbrc не вызовет пропуск и выход установится в ноль следующей командой cbi. Далее, sbrs пропустит команду sbi (пропуск по 1) и выход останется в нуле. Затем произойдет сдвиг числа ВЛЕВО (rol), соответственно, с этого момента, младший бит будет всегда 0. Независимо от самого числа. Это приведет к тому, что в итоге сработает команда sbi и выход установится в 1 до конца цикла. Т.е. явно не то что требуется. Можно предположить что правильно сделать (1<<7), но выполняется тоже что то не того - с инверсией...
Вот так ближе к истине

Код: Выделить всё

 ldi r17,8
    loop:
      sbrc r16,(1<<7)
      sbi port,bit
      sbrs r16,(1<<7)
      cbi port,bit 
      rol r16
      dec r17
      brne loop
Растактовку не смотрел. В итоге большого выигрыша по сравнению с:

Код: Выделить всё

void transmit_byte(unsigned char const byte)
{
unsigned char  mask;
for (mask=0x80;mask;mask>>1) (byte&mask)? (PORTW|=(1<<BIT)):(PORTW&=~(1<<BIT));
  38:   80 78          andi   r24, 0x80   ; 128
  3a:   88 23          and   r24, r24
  3c:   11 f0          breq   .+4         ; 0x42 <__SREG__+0x3>
  3e:   91 9a          sbi   0x12, 1   ; 18
  40:   01 c0          rjmp   .+2         ; 0x44 <__SREG__+0x5>
  42:   91 98          cbi   0x12, 1   ; 18
  44:   92 b3          in   r25, 0x12   ; 18
  46:   f9 cf          rjmp   .-14        ; 0x3a <transmit_byte+0x2>

00000048 <main>:
}
я не вижу.
Первый вариант производит переключения не идентичные примеру (всегда через установку выхода в 0, возможно и растактовка при числе типа 10101010 будет разная) - т.е. временные диаграммы будут построены не по логике примера, соответственно сравнение не корректно. Если я не прав, поправьте...

Re: Возможно без знакомства с ассемблером освоить Си?

Добавлено: Пт янв 13, 2012 11:28:19
BerZerK-ku
Ога, асм это игра на внимательность :))
sbi и cbi поменять местами, а вместо rol поставить lsr. Вот тогда вроде как будет то что надо.

Re: Возможно без знакомства с ассемблером освоить Си?

Добавлено: Пт янв 13, 2012 11:39:35
ibiza11
по моему тема уже давно исчерпана, все ответы уже даны. Добавлю : лучше один раз увидеть, чем 100 раз услышать.

Re: Возможно без знакомства с ассемблером освоить Си?

Добавлено: Пт янв 13, 2012 11:53:48
ploop
Да, конечно местами поменять. Сути это не меняет.

Re: Возможно без знакомства с ассемблером освоить Си?

Добавлено: Пт янв 13, 2012 13:35:44
Барсик
ATtiny13 писал(а):Возможно ли без знакомства с ассемблером освоить Си самостоятельно
Да. Я так и делал.

Делайте, как говорит Мастер Ломастер: http://radiokot.ru/forum/viewtopic.php? ... 1#p1104731 и всё у Вас получится.

Re: Возможно без знакомства с ассемблером освоить Си?

Добавлено: Пт янв 13, 2012 14:54:29
ATtiny13
Мастер Ломастер вам и
всем большое спасибо за хорошее объяснение моего вопроса я все понял :))
Теперь подскажите какую книгу купить для чтения в свободное время в печатном виде лучше читать :write:
понятие про логические элементы имею

Re: Возможно без знакомства с ассемблером освоить Си?

Добавлено: Пт янв 13, 2012 15:01:13
ibiza11
Здесь динамическая индикация на АСМ
А здесь динамическая индикация на Си
почитайте.

Re: Возможно без знакомства с ассемблером освоить Си?

Добавлено: Пт янв 13, 2012 15:01:55
BCluster
http://www.helloworld.ru/texts/comp/lang/c/c6/index.htm напечатать и читать) Отличный труд имхо