воспитанные люди, как минимум, рассказывают о том, в чем была проблемаfatall_error писал(а):я разобрался
CodeVision AVR в вопросах и ответах
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
-
fatall_error
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Ср сен 01, 2010 07:24:48
Re: CodeVision AVR в вопросах и ответах
Значит оскорбляем сразу!!!ARV писал(а):воспитанные люди, как минимум, рассказывают о том, в чем была проблемаfatall_error писал(а):я разобрался
Сделал так: sprintf(text,"бла-бла-бла"); и все заработало, короче параметры (%s) для строки не нужны.
Также работает конструкция:
chislo=123;
sprintf(text,"%3d",chislo);
Пробовал в CodeVisionAvr 1,25,9 и CodeVisionAvrEvalution 2,04,3a
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
в таком случае вообще не понятно, зачем использовать sprintf. вы с огромным успехом могли бы делать и так:fatall_error писал(а):Сделал так: sprintf(text,"бла-бла-бла"); и все заработало, короче параметры (%s) для строки не нужны.
Код: Выделить всё
lcd_puts("бла-бла-бла");если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
fatall_error
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Ср сен 01, 2010 07:24:48
Re: CodeVision AVR в вопросах и ответах
Потому, что у меня конструкция была другая:ARV писал(а):в таком случае вообще не понятно, зачем использовать sprintf. вы с огромным успехом могли бы делать и так:fatall_error писал(а):Сделал так: sprintf(text,"бла-бла-бла"); и все заработало, короче параметры (%s) для строки не нужны.Код: Выделить всё
lcd_puts("бла-бла-бла");
flash unsigned char *string[4][3] ={
{" dial_1 "," dial_2 "," dial_3 "},
{" send sms "," read sms "," delete sms "},
{" set1 "," set2 "," set3 "},
{" status1 "," status2 "," status3 "}
//////////////
sprintf(text,string[x][y]);
lcd_puts(text);
и так как у меня не работала sprintf я попробовал упростить ее явно, чтобы не грешить на массив
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
я не знаю, как там оно на самом деле, но sprintf работает со строками из ОЗУ, а вы использовали строки во flash. скорее всего надо параметр формата использовать другой. в avr-gcc для этого служит параметр %S - не прописная буква, а заглавная. то есть как-то так:
прочтите в хелпе, какие управляющие символы формата надо использовать для строк из flash, вот и все.
Код: Выделить всё
flash char str[] = "бла-бла-бла";
char text[32];
sprintf(text, "%S", str);если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
А Вы видите разницу междуfatall_error писал(а):Потому, что у меня конструкция была другая:
flash unsigned char *string[4][3] ={
{" dial_1 "," dial_2 "," dial_3 "},
{" send sms "," read sms "," delete sms "},
{" set1 "," set2 "," set3 "},
{" status1 "," status2 "," status3 "}
Код: Выделить всё
sprintf(text,string[x][y]);
lcd_puts(text);
Код: Выделить всё
lcd_puts(string[x][y]);
Я, например, нет.
sprintf(text,string[x][y]) просто скопирует строку из string[x][y] в tex. Причём сделает это с особыми правилами форматирования, которые будут занимать лишние ресурсы и процессорное время. А зачем это нужно ?
А то, что у Вас не работало из-за объявления строк в определённой области памяти, это уже проблема другая. И она будет в любом из двух вариантов.
-
fatall_error
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Ср сен 01, 2010 07:24:48
Re: CodeVision AVR в вопросах и ответах
Я хрен знает почему, но так я изначально пытался сделать и компилятор ругался, щас убрал flash и засунул прямо в lcd_puts массив - заработало. Вас наверно испугалось. Пасибище, ща тонну Говно-кода выкину.
Репект Вам ГУРУ по +1
Репект Вам ГУРУ по +1
- Cheburator
- Грызет канифоль
- Сообщения: 264
- Зарегистрирован: Пт дек 07, 2012 22:50:01
- Откуда: Moscow
Re: CodeVision AVR в вопросах и ответах
Добрый день!
Вот какая проблема у меня возникла...
Скажу сразу, что программист из меня - никакой. И хотя всю жизнь имел дело с электроникой, но с МК непосредственно столкнулся совсем недавно. По мере сил и свободного времени изучаю...
Так вот - пытаюсь понять, почему в примитивный, на первый взгляд, код из нескольких строчек, создает HEX непотребного размера?
Суть "проекта" в следующем: МК считывает показания с датчика температуры, сравнивает с жестко прописанными значениями, и выставляет в зависимости от результата сравнения 0 или 1 на соответствующей ноге. Мне казалось, что это до безобразия просто. И так да - на tiny2313 все без проблем работает. Но мне надо всунуть это в tiny13a. Но в него оно не влезает!
И у меня два вопроса:
1. Почему так получается?
2. Как с этим бороться?
Подскажите?
Инструменты: Atmel Studio 7 + CodeVisionAVR 3.24
Сам код:
Схема:

Вот какая проблема у меня возникла...
Скажу сразу, что программист из меня - никакой. И хотя всю жизнь имел дело с электроникой, но с МК непосредственно столкнулся совсем недавно. По мере сил и свободного времени изучаю...
Так вот - пытаюсь понять, почему в примитивный, на первый взгляд, код из нескольких строчек, создает HEX непотребного размера?
Суть "проекта" в следующем: МК считывает показания с датчика температуры, сравнивает с жестко прописанными значениями, и выставляет в зависимости от результата сравнения 0 или 1 на соответствующей ноге. Мне казалось, что это до безобразия просто. И так да - на tiny2313 все без проблем работает. Но мне надо всунуть это в tiny13a. Но в него оно не влезает!
И у меня два вопроса:
1. Почему так получается?
2. Как с этим бороться?
Подскажите?
Инструменты: Atmel Studio 7 + CodeVisionAVR 3.24
Сам код:
Спойлер
Код: Выделить всё
#include <tiny13a.h>
#include <1wire.h>
#include <ds18b20.h>
void main(void)
{
float temper;
DDRB=0b000100;
PORTB=0b000000;
w1_init();
ds18b20_init(0,10,90,DS18B20_12BIT_RES);
while (1)
{
temper=ds18b20_temperature(0);
if (temper > 40) {PORTB=0b000100;
};
if (temper < 35) {PORTB=0b000000;
};
}
}
Спойлер
- Вложения
-
- t14.jpg
- (41.87 КБ) 679 скачиваний
А что подумал Кролик, никто не узнал, потому что он был очень воспитанный.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
потому что float - злоCheburator писал(а):1. Почему так получается?
не использовать float. ищите библиотечку для вашего датчика, которая работает в целых числах. но боюсь, для attiny13 эта библиотечка должна быть на ассемблере...Cheburator писал(а):2. Как с этим бороться?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Cheburator
- Грызет канифоль
- Сообщения: 264
- Зарегистрирован: Пт дек 07, 2012 22:50:01
- Откуда: Moscow
Re: CodeVision AVR в вопросах и ответах
Другие типы (int, char) принципиально ничего не меняют. Да и библиотека эта для датчика очень удобна. В ней есть функция (ds18b20_temperature), которая сразу выдает значение температуры в градусах...ARV писал(а):потому что float - зло
И все-таки я не понимаю, почему получается такой большой HEX?
Может мой подход в принципе не верен, и я что-то не так делаю?
А что подумал Кролик, никто не узнал, потому что он был очень воспитанный.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
я же вам ответил - никто не скажет ничего другого!
float - зло, либа нужна другая. функция внутри себя работает с float, и то, что вы потом ее результат пихаете в int ничего не меняет.
float - зло, либа нужна другая. функция внутри себя работает с float, и то, что вы потом ее результат пихаете в int ничего не меняет.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: CodeVision AVR в вопросах и ответах
А что там? Два байта температуры с датчика. Неужто Тинька два простых числа сравнить не сможет?ARV писал(а):боюсь, для attiny13 эта библиотечка должна быть на ассемблере...
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Интересно, как можно оценивать ресурсы библиотеки, не зная её внутренностей ? Откуда такое удивление ?
Создайте свой код, тогда уже будете адекватно его оценивать.
Создайте свой код, тогда уже будете адекватно его оценивать.
Re: CodeVision AVR в вопросах и ответах
А она вам нужна? У вас же температура никуда не выводится. Вот и задавайте диапазон температур на уровне препроцессора.Cheburator писал(а):Да и библиотека эта для датчика очень удобна. В ней есть функция (ds18b20_temperature), которая сразу выдает значение температуры в градусах...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
я не поручусь, что на Си можно получить 2 байта из датчика так, чтобы влезло в тиньку.scorpi_0n писал(а):А что там? Два байта температуры с датчика. Неужто Тинька два простых числа сравнить не сможет?ARV писал(а):боюсь, для attiny13 эта библиотечка должна быть на ассемблере...
хотя попробовать можно
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Cheburator
- Грызет канифоль
- Сообщения: 264
- Зарегистрирован: Пт дек 07, 2012 22:50:01
- Откуда: Moscow
Re: CodeVision AVR в вопросах и ответах
Всем спасибо за ответы.
Однако, вопрос(ы) так и остались...
UPD.
Библиотеку и заголовочный файл переписал. Функция теперь внутри себя работает не с float, а с int. Но разницы большой нет. Все равно лишние полсотни байт...
Однако, вопрос(ы) так и остались...
Поясните чуть подробнее. Ибо, как я уже писал, я только начал изучать программирование MK.scorpi_0n писал(а):Вот и задавайте диапазон температур на уровне препроцессора.
UPD.
Библиотеку и заголовочный файл переписал. Функция теперь внутри себя работает не с float, а с int. Но разницы большой нет. Все равно лишние полсотни байт...
Последний раз редактировалось Cheburator Вс дек 13, 2015 21:57:41, всего редактировалось 1 раз.
А что подумал Кролик, никто не узнал, потому что он был очень воспитанный.
-
fatall_error
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Ср сен 01, 2010 07:24:48
Re: CodeVision AVR в вопросах и ответах
А че конкретно пишет не: "version code size limit exceeded" ???
- Cheburator
- Грызет канифоль
- Сообщения: 264
- Зарегистрирован: Пт дек 07, 2012 22:50:01
- Откуда: Moscow
Re: CodeVision AVR в вопросах и ответах
Вот что:fatall_error писал(а):А че конкретно пишет
- Вложения
-
- t14-1.JPG
- (19.63 КБ) 756 скачиваний
А что подумал Кролик, никто не узнал, потому что он был очень воспитанный.
-
fatall_error
- Первый раз сказал Мяу!
- Сообщения: 22
- Зарегистрирован: Ср сен 01, 2010 07:24:48
Re: CodeVision AVR в вопросах и ответах
Я конечно тоже не программер, выше вон, мои тупые косяки ребята разгребали, но если контроллер принципиален я смотрю там есть АЦП можно взять другой датчик и мерять с помощью ADC вот я ковырял такое например https://www.youtube.com/watch?v=KD1BGVeIyhA.
Я взял ваш код с копировал в демо CodevisionAVR он меня тоже нафиг послал сказал, что много кода - много библиотеки подтягивают.
Мож ошибаюсь поправьте если че. Тока не пинать.
Я взял ваш код с копировал в демо CodevisionAVR он меня тоже нафиг послал сказал, что много кода - много библиотеки подтягивают.
Мож ошибаюсь поправьте если че. Тока не пинать.
- Cheburator
- Грызет канифоль
- Сообщения: 264
- Зарегистрирован: Пт дек 07, 2012 22:50:01
- Откуда: Moscow
Re: CodeVision AVR в вопросах и ответах
Все верно. Но хотелось использовать именно tiny13a и ds18b20. Согласен, не самое лучшее и экономичное решение, но причин на это 3. Первая - у меня того и другого много.
Вторая - tiny13 в soic8 - очень компактная, что во многих случаях важно. Ну, и третья причина, пожалуй, основная - желание докопаться до истины. Ибо если этот МК не может справится с такой, на мой взгляд, элементарной задачей, то не понятно, что он вообще может. А это, в свою очередь, означает, что это я что-то не так делаю. Вот я и хочу разобраться.
Последний раз редактировалось Cheburator Вс дек 13, 2015 22:34:56, всего редактировалось 2 раза.
А что подумал Кролик, никто не узнал, потому что он был очень воспитанный.


