Программирование AVR на C. Мелкие вопросы
Программирование AVR на C. Мелкие вопросы
Здравствуйте, тут у меня возникли некоторые вопрсы и я создал тему, может у кого-то тоже еще возникнут, пускай пишут сюда.
1.Я слышал что не лицензионный Code Visio транслирует код не больше 2КБ. Правда ли это?
2. Хотел спросить по поводу фенкции sprintf.
Есть такое выражение: sprintf(lcd_buffer,"t=%i.%u\xdfC",temp,temp%1);
где
char lcd_buffer[33];
int temp;
как бы записываем у lcd_buffer значение Temp, а "t=%i.%u\xdfC" - что за набор, а потом еще temp%1 ??
1.Я слышал что не лицензионный Code Visio транслирует код не больше 2КБ. Правда ли это?
2. Хотел спросить по поводу фенкции sprintf.
Есть такое выражение: sprintf(lcd_buffer,"t=%i.%u\xdfC",temp,temp%1);
где
char lcd_buffer[33];
int temp;
как бы записываем у lcd_buffer значение Temp, а "t=%i.%u\xdfC" - что за набор, а потом еще temp%1 ??
- Redrik Shuhart
- Друг Кота
- Сообщения: 3641
- Зарегистрирован: Пт апр 03, 2009 22:12:58
- Откуда: Из Украины, Кировоградская облась,
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Twen, никогда не хотелось вам книжку по Си почитать?
Redrik Shuhart, никогда не хотелось вам даташит почитать?
Redrik Shuhart, никогда не хотелось вам даташит почитать?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Программирование AVR на C. Мелкие вопросы
Twen писал(а):Здравствуйте, тут у меня возникли некоторые вопрсы
2. Хотел спросить по поводу фенкции sprintf.
Есть такое выражение: sprintf(lcd_buffer,"t=%i.%u\xdfC",temp,temp%1);
где
char lcd_buffer[33];
int temp;
как бы записываем у lcd_buffer значение Temp, а "t=%i.%u\xdfC" - что за набор, а потом еще temp%1 ??
Это значит что мы записываем в lcd_buffer строку символов, состоящую из "t=<целое значение температуры>.<дробное значение температуры><0xDF>С", например если температура 23,6 градусов цельсия, то в буфере будет "t=23.6<знак градус>С". А вообще смотрите описание функции sprintf в документации к компилятору или в книге по си (например от создателей С - Кернигана и Ричи)
- Redrik Shuhart
- Друг Кота
- Сообщения: 3641
- Зарегистрирован: Пт апр 03, 2009 22:12:58
- Откуда: Из Украины, Кировоградская облась,
А где можно скачать документацию на Code Visio ?
Последний раз редактировалось Twen Сб сен 26, 2009 21:33:07, всего редактировалось 1 раз.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
судя по всему там должно быть temp%10, но нолик куда-то потерялсяTwen писал(а):smac: спасибо я понял, а temp%1 зачем?
А где можно скачать документацию на Code Visio ?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
ARV писал(а):судя по всему там должно быть temp%10, но нолик куда-то потерялся
Вопрос в том как представлено temp. Если она представлена целым числом равным температура*10, то нужно выводить сначала temp/10, а потом отделенные точкой temp%10, если же она представлена дробным числом, то в примере по-идее все правильно, т. к. приведение к целому при выводе должно отбросить дробную часть, которая возмется при temp%1. По-моему так.
- Synergetik
- Встал на лапы
- Сообщения: 117
- Зарегистрирован: Чт фев 28, 2008 23:54:35
- Откуда: Воскресенск, МО
- Контактная информация:
Redrik Shuhart писал(а):я тож хочу спросить КАК ЗАПУСТИТЬ ПРЕРЫВАНИЯ НА PA0 ?
Надо бы знать какой контроллер чтобы ответить на данный вопрос. Для tiny2313 (и тех у которых прерывание PCINT одно) обсуждалось тут
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
если temp представлена дробным числом, то вообще непонятно, к чему изврат: можно использовать спецификатор %f и выводить сразу и целую и дробную части.smac писал(а):Вопрос в том как представлено temp. Если она представлена целым числом равным температура*10, то нужно выводить сначала temp/10, а потом отделенные точкой temp%10, если же она представлена дробным числом, то в примере по-идее все правильно, т. к. приведение к целому при выводе должно отбросить дробную часть, которая возмется при temp%1. По-моему так.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
smac писал(а):Вопрос в том как представлено temp.
...
если же она представлена дробным числом, то в примере по-идее все правильно, т. к. приведение к целому при выводе должно отбросить дробную часть, которая возмется при temp%1. По-моему так.
Код: Выделить всё
sprintf(lcd_buffer,"t=%i.%u\xdfC",temp,temp%1); Если тут temp не целое, то %i выведет совершенно не то что хотелось.
Я конечно не знаю какой у вас компилятор, но GCC просто выдает предупреждение, что тип не соответствует, возможно другой какой-нибудь компилятор может сделать приведение типа, но это работа программиста.