Возможно без знакомства с ассемблером освоить Си?
Re: Возможно без знакомства с ассемблером освоить Си?
Блин, ну юморист 
- Реклама
Re: Возможно без знакомства с ассемблером освоить Си?
Всем спасибо за коментарии
Понял что надо хотя бы поверхностно познакомиться с асамблером чтобы хоть немного понимать принцип действия и архитектуру мк
мне на си нужно хотябы знать как написать бегущий огонь таймер или что-то не очень сложное
Понял что надо хотя бы поверхностно познакомиться с асамблером чтобы хоть немного понимать принцип действия и архитектуру мк
мне на си нужно хотябы знать как написать бегущий огонь таймер или что-то не очень сложное
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Возможно без знакомства с ассемблером освоить Си?
либо объясняли вам плохо, либо вы поняли не так. архитектура МК - это голая аппаратура, логика - на уровне регистров, триггеров и т.п. чтобы понять, как она работает, нужно немного шарить в цифровой схемотехнике, хотя бы на уровне "что такое 2И-НЕ" или "что такое параллельный регистр с третьим состоянием выходов". взаимодействие отдельных аппаратных частей МК можно на первых порах понять на уровне "когда сюда поступает такой-то сигнал, то здесь происходит вот это" - буквально "на пальцах". для всего этого ассемблер совершенно не нужен.ATtiny13 писал(а):Понял что надо хотя бы поверхностно познакомиться с асамблером чтобы хоть немного понимать принцип действия и архитектуру мк
далее нужно понять, что такое двоичная система счисления и как происходят математические и логические операции над числами внутри МК. это, в общем-то, чистая математика и логика, опять же - ассемблер не при делах. на этом этапе главное понять, что ЧИСЛО внутри МК хранится и обрабатывается, и при этом совершенно безразлично, в какой именно системе это делается. то есть важно понять, что ЧИСЛО - оно одно и то же не зависимо от системы счисления - с этим у многих начинающих проблемы, нередко можно встретить просьбы типа "как вывести двоичное число в десятичном виде - ведь в МК все в двоичном коде". в частности, этот вопрос ПРАВИЛЬНО формулируется так: "как вывести ЧИСЛО из мк в десятичном формате" - то есть задумываться о том, что внутри МК число в какой-то иной системе НЕ НУЖНО.
таким образом, для начала программирования МК не нужно знать ассемблер даже поверхностно. по крайней мере до тех пор, пока основная задача - помигать светодиодами и попищать динамиком, понажимать кнопки и т.п. умение разделить сложную задачу на более простые части, умение описать алгоритмически действия над данными (числами) для получения нужного результата - это наиболее важное в программировании. и в этом разрезе ассемблер не более важен и полезен, чем паскаль, Си или фортран (на котором для Мк вообще никто не пишет).
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: Возможно без знакомства с ассемблером освоить Си?
Как бы тут не холиварили, я бы советовал первые программы начинать писать на асме.
Re: Возможно без знакомства с ассемблером освоить Си?
опять бесконечная тема "кто первый - курица или яйцо?"
да все хороши, только вот пока досконально все изучить успееш - того и гляди
мелкосхемку уж с производства сняли
да все хороши, только вот пока досконально все изучить успееш - того и гляди
мелкосхемку уж с производства сняли
- Реклама
Re: Возможно без знакомства с ассемблером освоить Си?
Пушистый, те-то чё волноваться, ты-же у нас "многостаночник"..BOB51 писал(а):пока досконально все изучить успееш - того и гляди
мелкосхемку уж с производства сняли
Да и 51-е знаешь, а у них за все 34 года выпуска система команд не менялась..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Re: Возможно без знакомства с ассемблером освоить Си?
Я так думаю: одно другому не мешает. На С все красиво и понятно как в школе на BASICе, но когда сражаешься со временем (или размером) приходится переходить на вставки из ASMа. Вот я так и борюсь. С уважением.
Re: Возможно без знакомства с ассемблером освоить Си?
Пример последовательного вывода байта на С под C-M3 в студию!Могу сказать, что на моем любимом M3 это делается еще легче и без необходимости прибегать к машинным кодам.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Re: Возможно без знакомства с ассемблером освоить Си?
А вы даташит на МК прочтите. Для этого не нужны знания ни Assembler, ни Cнемного понимать принцип действия и архитектуру мк
В остальном соглашусь с Мастером Ломатером, весьма хорошо человек расписал..
-
vAv
- Прорезались зубы
- Сообщения: 221
- Зарегистрирован: Пн июн 13, 2011 20:04:59
- Откуда: Новочебоксарск
- Контактная информация:
Re: Возможно без знакомства с ассемблером освоить Си?
У с/с++ есть одно неоспоримое преимущество - навыки программирования на нем могут пригодится абсолютно на любой платформе, т.к. язык напрямую не привязан к железу.ploop писал(а):Как бы тут не холиварили, я бы советовал первые программы начинать писать на асме.
А для начинающих тем более предпочтительно изучить си - проще сначала разобраться с языком высокого уровня и потом, если приспичит, изучить и нижний уровень. Иначе неудачи при работе с асмом могут вообще отбить охоту программировать.
И я, к примеру, могу кодить на z80, на x86 и на STL STEP7 (ну и вообще на LD и тд), но изучать еще асм авр или pic уже тупо вломы.
Re: Возможно без знакомства с ассемблером освоить Си?
Я же не говорил, что Си не нужен 
Re: Возможно без знакомства с ассемблером освоить Си?
Вот я и хотел сказать, кстати, похожую мысль, как у vAv.
Вот станет человек богом ассемблера, потом приспичит ему сесть на си или другой высокоуровневый язык - и будет ужоснах
Как начнёт применять стиль программирования на ассемблере к сям - получится сплошной говно-, быдлокод и прочий индусский код
Будем потом сами же сидеть и рыдать (ржать, умирать от инфарктов, сбегать в ужасе)
Конечно можно сказать, что всё зависит от человека.. Но чаще всего получается, что откладывается один раз на подкорке - и всё, крандец, ресурс обучаемости исчерпан
Вот станет человек богом ассемблера, потом приспичит ему сесть на си или другой высокоуровневый язык - и будет ужоснах
Конечно можно сказать, что всё зависит от человека.. Но чаще всего получается, что откладывается один раз на подкорке - и всё, крандец, ресурс обучаемости исчерпан
Re: Возможно без знакомства с ассемблером освоить Си?
http://infocenter.arm.com/help/index.js ... cjiic.htmlYS писал(а): Пример последовательного вывода байта на С под C-M3 в студию!
Re: Возможно без знакомства с ассемблером освоить Си?
Я просил пример кода.
А про bit-banding я и так знаю. И сомневаюсь, что с ним будет удобнее и быстрее, чем с использованием переноса.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Re: Возможно без знакомства с ассемблером освоить Си?
ОК, вот для затравки:
А теперь покажите мне то же самое, только с bit-banding'ом. 
Код: Выделить всё
uint8_t byte,i;
...
for (i=0; i<8; i++)
{
if (byte & 1)
{
//"1" bit code
}
else
{
//"0" bit code
}
byte=byte >> 1;
}
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Re: Возможно без знакомства с ассемблером освоить Си?
Если ты знаком, чего тебе не понятно ?
Вобще делать ничего не надо, только инкрементить указатель, по которому уже и так читается 0 или 1 в зависимости от бита, в который транслируется адрес
Вобще делать ничего не надо, только инкрементить указатель, по которому уже и так читается 0 или 1 в зависимости от бита, в который транслируется адрес
Re: Возможно без знакомства с ассемблером освоить Си?
Ну, знаете ли, интересно поглядеть на свежее решение.Если ты знаком, чего тебе не понятно ?
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Re: Возможно без знакомства с ассемблером освоить Си?
Я как бы кроме AVR мало с чем знаком, кто-нибудь может показать, во что превратит этот код компилятор?YS писал(а):ОК, вот для затравки:
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: Возможно без знакомства с ассемблером освоить Си?
Я примерно такой функцией делаю обычно:
Если нужно иметь возможность изменять направление (первый байт младший или старший), то примерно так:
Код: Выделить всё
void transmit_byte(unsigned char const *byte)
{
unsigned char mask;
for (mask=0x80;mask;mask>>1) (*byte&mask)? (PORTW|=(1<<BIT)):(PORTW&=~(1<<BIT));
}
Код: Выделить всё
void transmit_byte(unsigned char const *byte, unsigned char direct)
{
unsigned char mask;
for (mask=(direct)? 1:0x80;mask;mask=(direct)? mask<<1:mask>>1)
(*byte&mask)? (PORTW|=(1<<BIT)):(PORTW&=~(1<<BIT));
}
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: Возможно без знакомства с ассемблером освоить Си?
Этот код (Atmega8):ploop писал(а): Я как бы кроме AVR мало с чем знаком, кто-нибудь может показать, во что превратит этот код компилятор?
Код: Выделить всё
#include <avr/io.h>
#define PORTW PORTD
#define BIT 1
void transmit_byte(unsigned char const byte)
{
unsigned char mask;
for (mask=0x80;mask;mask>>1) (byte&mask)? (PORTW|=(1<<BIT)):(PORTW&=~(1<<BIT));
}
int main(void)
{
unsigned char data=0;
for(;;)
{
transmit_byte(data);
data++;
}
return 0;
}
Код: Выделить всё
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>:
}
int main(void)
{
48: 1f 93 push r17
4a: 10 e0 ldi r17, 0x00 ; 0
unsigned char data=0;
for(;;)
{
transmit_byte(data);
4c: 81 2f mov r24, r17
4e: f4 df rcall .-24 ; 0x38 <transmit_byte>
data++;
50: 1f 5f subi r17, 0xFF ; 255
52: fc cf rjmp .-8 ; 0x4c <main+0x4>
...
Код выше
Код: Выделить всё
#include <avr/io.h>
#define PORTW PORTD
#define BIT 1
void transmit_byte(unsigned char byte)
{
unsigned char i;
for (i=0; i<8; i++)
{
if (byte & 1)
{
PORTW|=1<<BIT; //"1" bit code
}
else
{
PORTW&=~(1<<BIT);//"0" bit code
}
byte=byte >> 1;
}
}
int main(void)
{
unsigned char data=0;
for(;;)
{
transmit_byte(data);
data++;
}
return 0;
}
Код: Выделить всё
void transmit_byte(unsigned char byte)
{
38: 90 e0 ldi r25, 0x00 ; 0
unsigned char i;
for (i=0; i<8; i++)
{
if (byte & 1)
3a: 80 ff sbrs r24, 0
3c: 02 c0 rjmp .+4 ; 0x42 <__SREG__+0x3>
{
PORTW|=1<<BIT; //"1" bit code
3e: 91 9a sbi 0x12, 1 ; 18
40: 01 c0 rjmp .+2 ; 0x44 <__SREG__+0x5>
}
else
{
PORTW&=~(1<<BIT);//"0" bit code
42: 91 98 cbi 0x12, 1 ; 18
void transmit_byte(unsigned char byte)
{
unsigned char i;
for (i=0; i<8; i++)
44: 9f 5f subi r25, 0xFF ; 255
46: 98 30 cpi r25, 0x08 ; 8
48: 11 f0 breq .+4 ; 0x4e <__SREG__+0xf>
else
{
PORTW&=~(1<<BIT);//"0" bit code
}
byte=byte >> 1;
4a: 86 95 lsr r24
4c: f6 cf rjmp .-20 ; 0x3a <transmit_byte+0x2>
4e: 08 95 ret
00000050 <main>:
}
}
int main(void)
{
50: 1f 93 push r17
52: 10 e0 ldi r17, 0x00 ; 0
unsigned char data=0;
for(;;)
{
transmit_byte(data);
54: 81 2f mov r24, r17
56: f0 df rcall .-32 ; 0x38 <transmit_byte>
data++;
58: 1f 5f subi r17, 0xFF ; 255
5a: fc cf rjmp .-8 ; 0x54 <main+0x4>
Любой, заслуживающий внимания, опыт приобретается себе в убыток...


