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

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
Мастер Ломастер вам и
всем большое спасибо за хорошее объяснение моего вопроса я все понял
Теперь подскажите какую книгу купить для чтения в свободное время в печатном виде лучше читать

понятие про логические элементы имею
Re: Возможно без знакомства с ассемблером освоить Си?
Добавлено: Пт янв 13, 2012 15:01:13
ibiza11
Здесь динамическая индикация на АСМ
А здесь динамическая индикация на Си
почитайте.
Re: Возможно без знакомства с ассемблером освоить Си?
Добавлено: Пт янв 13, 2012 15:01:55
BCluster