Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
05.03.2010, 18:13
|
#11
|
Почётный гражданин KAZUS.RU
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
Сообщение от svv11
|
А не подкинет ли кто примерчик c синтаксисом для GCC WinAVR, или просто укажите ошибку в том фрагменте что я в начале выложил.?
|
До вечера подождешь? А то работы выше ушей.
|
|
|
|
06.03.2010, 04:07
|
#12
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
Сообщение от SasaVitebsk
|
AVR Studio - не компилятор. Надоело на форумах читать такую ересь. AVR Studio - это оболочка + ассемблер + симулятор-отладчик. Компилятор Си - внешний.
|
Это то же бред...
Для перевода текста с языков программирования в исполняемый код, существуют компиляторы и интерпретаторы.
Ассемблер это ЯЗЫК а никак не переводчик с языка в код... Недаром ведь говорят Компилятор языка Си или Фортран итд... То же справедливо и для ассемблера...
Так вот то что вы называете ассемблер - это на самом деле компилятор с языка ассемблер.
Таким образом... AVR Studio - это оболочка + компилятор с языка Ассемблер + симулятор-отладчик.
|
|
|
|
06.03.2010, 07:37
|
#13
|
Частый гость
Регистрация: 23.05.2005
Сообщений: 16
Сказал спасибо: 4
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
А если так ?
Цитата:
|
#include ‹ctype.h›
#include ‹stdint.h›
#include ‹stdio.h›
#include ‹inttypes.h›
#include ‹avr/io.h›
volatile int i;
int __attribute__ ((OS_main)) main(void)
{
for( ; ; )
{
unsigned char temp_1=(PINA & 0x03);
unsigned char temp_2=PINB;
i= (temp_1 ‹‹ 8 ) | temp_2 ;
PORTC = 0x02;
}
return(-1);
}
|
|
|
|
|
06.03.2010, 09:54
|
#14
|
Заблокирован
Регистрация: 14.04.2008
Адрес: Украина, совсем рядом от террористов!
Сообщений: 388
Сказал спасибо: 32
Сказали Спасибо 85 раз(а) в 62 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
Сообщение от picavr
|
Так вот то что вы называете ассемблер - это на самом деле компилятор с языка ассемблер.
Таким образом... AVR Studio - это оболочка + компилятор с языка Ассемблер + симулятор-отладчик.
|
А может все таки транслятор?
|
|
|
|
06.03.2010, 21:47
|
#15
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
Сообщение от ALEKSEY188
|
А может все таки транслятор?
|
Компилятор это разновидность транслятора. Трансляторы подразделяются на компиляторы и интерпретаторы.
Выходным форматом компилятора чаще всего является ассемблер.
Ассемблирование не является компиляцией в полном понимании. Так как это уже машинный язык, просто записанный в виде мнемонических имён. Конечно, можно рассматривать макроассемблер, как некоторую разновидность, но в целом, ассемблер не является компилятором. По сути он ничего не делает.
Написание ассемблера - примитивная задача для десятикласника.
|
|
|
|
07.03.2010, 01:00
|
#16
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
Какая смешная тема. Весь сыр-бор из-за последовательности чтения пар 8-ми битных регистров? Так читают обычно проще:
Код:
|
i = ADC;
// или
i = ADC & 0x3F; |
А ADC определен как 16 разрядный регистр:
Код:
|
#define ADC _SFR_IO16(0x04) |
Последовательность чтения/записи в нем правильная автоматом.
Использование в одном выражении двух переменных, с критичной последовательностью обращения к ним, может дать неожиданный результат. Собственно тут это и происходит. Так что если хочется не пользоваться стандартными расширениями GCC, то:
Код:
|
i = ADCL;
i |= ((ADCH & 0x03)‹‹8); |
;
А в выражении:
Код:
|
Signal = ((PORTK.IN & 0x03) ‹‹ 8) | PORTJ.IN; |
Первым выполнится то, что в скобках! И если PORTK.IN будет == ADCH, то трабл неизбежен.
|
|
|
|
07.03.2010, 01:20
|
#17
|
Почётный гражданин KAZUS.RU
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
Сообщение от svv11
|
Разбираясь почему нет нормального обмена с внешним АЦП
|
kison - АЦП то внешнее и автоматом ниче делаться не станет.
|
|
|
|
07.03.2010, 01:56
|
#18
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
Сообщение от _guardianangel
|
kison - АЦП то внешнее и автоматом ниче делаться не станет.
|
Тогда какая разница в какой последовательности читать? Я возможно не понял задачу, но такие траблы обычно именно с внутренним ацп происходят. А если внешнее, то последовательность чтения не имеет значения.
Там выше дано выражение:
Код:
|
Signal = ((PORTK.IN & 0x03) ‹‹ 8) | PORTJ.IN; |
Как оно связано с внешним АЦП? Если же ацп все же внешнее, с параллельным интерфейсом, то абсолютно пофигу в какой последовательности его считывать. Главное что бы данные не изменились во время этого самого чтения.
|
|
|
|
07.03.2010, 02:35
|
#19
|
Почётный гражданин KAZUS.RU
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
По поводу асм кода
Пример:
Код:
|
int i;
volatile int main(void)
{
for(;;)
{
asm volatile ("in %A0,%1" "\n\t" /* PORTA мл. байт АЦП */
"in %B0,%2" "\n\t"
"andi %B0,0x03" "\n\t"
:"=r" (i) /* выходные операторы */
:"I" (_SFR_IO_ADDR(PINA)), "I" (_SFR_IO_ADDR(PINB)) /* входные операторы */
);
}
return(-1);
} |
Это чтение 2 портов в переменную i и наложение на старший байт маски 0x03.
|
|
|
Сказали "Спасибо" _guardianangel
|
|
|
07.03.2010, 02:37
|
#20
|
Почётный гражданин KAZUS.RU
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
Re: Си-шный компилятор в AVR Studio меняет последовательность команд
Сообщение от kison
|
Как оно связано с внешним АЦП?
|
Ну в первых постах грилось что чтение почемуто происходит раньше синхроимпульса, но кода генерящего его приведено не было.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:11.
|
|