CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

fatall_error писал(а):я разобрался
воспитанные люди, как минимум, рассказывают о том, в чем была проблема
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
fatall_error
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Ср сен 01, 2010 07:24:48

Re: CodeVision AVR в вопросах и ответах

Сообщение fatall_error »

ARV писал(а):
fatall_error писал(а):я разобрался
воспитанные люди, как минимум, рассказывают о том, в чем была проблема
Значит оскорбляем сразу!!! :cry:

Сделал так: 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 в вопросах и ответах

Сообщение ARV »

fatall_error писал(а):Сделал так: sprintf(text,"бла-бла-бла"); и все заработало, короче параметры (%s) для строки не нужны.
в таком случае вообще не понятно, зачем использовать sprintf. вы с огромным успехом могли бы делать и так:

Код: Выделить всё

lcd_puts("бла-бла-бла");
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
fatall_error
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Ср сен 01, 2010 07:24:48

Re: CodeVision AVR в вопросах и ответах

Сообщение fatall_error »

ARV писал(а):
fatall_error писал(а):Сделал так: sprintf(text,"бла-бла-бла"); и все заработало, короче параметры (%s) для строки не нужны.
в таком случае вообще не понятно, зачем использовать sprintf. вы с огромным успехом могли бы делать и так:

Код: Выделить всё

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 в вопросах и ответах

Сообщение ARV »

я не знаю, как там оно на самом деле, но sprintf работает со строками из ОЗУ, а вы использовали строки во flash. скорее всего надо параметр формата использовать другой. в avr-gcc для этого служит параметр %S - не прописная буква, а заглавная. то есть как-то так:

Код: Выделить всё

flash char str[] = "бла-бла-бла";
char text[32];

sprintf(text, "%S", str);
прочтите в хелпе, какие управляющие символы формата надо использовать для строк из flash, вот и все.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

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 в вопросах и ответах

Сообщение fatall_error »

Я хрен знает почему, но так я изначально пытался сделать и компилятор ругался, щас убрал flash и засунул прямо в lcd_puts массив - заработало. Вас наверно испугалось. Пасибище, ща тонну Говно-кода выкину.
Репект Вам ГУРУ по +1
Аватара пользователя
Cheburator
Грызет канифоль
Сообщения: 264
Зарегистрирован: Пт дек 07, 2012 22:50:01
Откуда: Moscow

Re: CodeVision AVR в вопросах и ответах

Сообщение Cheburator »

Добрый день!
Вот какая проблема у меня возникла...
Скажу сразу, что программист из меня - никакой. И хотя всю жизнь имел дело с электроникой, но с МК непосредственно столкнулся совсем недавно. По мере сил и свободного времени изучаю...
Так вот - пытаюсь понять, почему в примитивный, на первый взгляд, код из нескольких строчек, создает 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 в вопросах и ответах

Сообщение ARV »

Cheburator писал(а):1. Почему так получается?
потому что float - зло
Cheburator писал(а):2. Как с этим бороться?
не использовать float. ищите библиотечку для вашего датчика, которая работает в целых числах. но боюсь, для attiny13 эта библиотечка должна быть на ассемблере...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Cheburator
Грызет канифоль
Сообщения: 264
Зарегистрирован: Пт дек 07, 2012 22:50:01
Откуда: Moscow

Re: CodeVision AVR в вопросах и ответах

Сообщение Cheburator »

ARV писал(а):потому что float - зло
Другие типы (int, char) принципиально ничего не меняют. Да и библиотека эта для датчика очень удобна. В ней есть функция (ds18b20_temperature), которая сразу выдает значение температуры в градусах...
И все-таки я не понимаю, почему получается такой большой HEX? :dont_know:
Может мой подход в принципе не верен, и я что-то не так делаю?
А что подумал Кролик, никто не узнал, потому что он был очень воспитанный.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

я же вам ответил - никто не скажет ничего другого!
float - зло, либа нужна другая. функция внутри себя работает с float, и то, что вы потом ее результат пихаете в int ничего не меняет.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: CodeVision AVR в вопросах и ответах

Сообщение scorpi_0n »

ARV писал(а):боюсь, для attiny13 эта библиотечка должна быть на ассемблере...
А что там? Два байта температуры с датчика. Неужто Тинька два простых числа сравнить не сможет?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Аlex »

Интересно, как можно оценивать ресурсы библиотеки, не зная её внутренностей ? Откуда такое удивление ?
Создайте свой код, тогда уже будете адекватно его оценивать.
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: CodeVision AVR в вопросах и ответах

Сообщение scorpi_0n »

Cheburator писал(а):Да и библиотека эта для датчика очень удобна. В ней есть функция (ds18b20_temperature), которая сразу выдает значение температуры в градусах...
А она вам нужна? У вас же температура никуда не выводится. Вот и задавайте диапазон температур на уровне препроцессора.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

scorpi_0n писал(а):
ARV писал(а):боюсь, для attiny13 эта библиотечка должна быть на ассемблере...
А что там? Два байта температуры с датчика. Неужто Тинька два простых числа сравнить не сможет?
я не поручусь, что на Си можно получить 2 байта из датчика так, чтобы влезло в тиньку.

хотя попробовать можно :) но лень
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Cheburator
Грызет канифоль
Сообщения: 264
Зарегистрирован: Пт дек 07, 2012 22:50:01
Откуда: Moscow

Re: CodeVision AVR в вопросах и ответах

Сообщение Cheburator »

Всем спасибо за ответы.
Однако, вопрос(ы) так и остались...
scorpi_0n писал(а):Вот и задавайте диапазон температур на уровне препроцессора.
Поясните чуть подробнее. Ибо, как я уже писал, я только начал изучать программирование MK. :(

UPD.
Библиотеку и заголовочный файл переписал. Функция теперь внутри себя работает не с float, а с int. Но разницы большой нет. Все равно лишние полсотни байт... :dont_know:
Последний раз редактировалось Cheburator Вс дек 13, 2015 21:57:41, всего редактировалось 1 раз.
А что подумал Кролик, никто не узнал, потому что он был очень воспитанный.
fatall_error
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Ср сен 01, 2010 07:24:48

Re: CodeVision AVR в вопросах и ответах

Сообщение fatall_error »

А че конкретно пишет не: "version code size limit exceeded" ???
Аватара пользователя
Cheburator
Грызет канифоль
Сообщения: 264
Зарегистрирован: Пт дек 07, 2012 22:50:01
Откуда: Moscow

Re: CodeVision AVR в вопросах и ответах

Сообщение Cheburator »

fatall_error писал(а):А че конкретно пишет
Вот что:
Изображение
Вложения
t14-1.JPG
(19.63 КБ) 756 скачиваний
А что подумал Кролик, никто не узнал, потому что он был очень воспитанный.
fatall_error
Первый раз сказал Мяу!
Сообщения: 22
Зарегистрирован: Ср сен 01, 2010 07:24:48

Re: CodeVision AVR в вопросах и ответах

Сообщение fatall_error »

Я конечно тоже не программер, выше вон, мои тупые косяки ребята разгребали, но если контроллер принципиален я смотрю там есть АЦП можно взять другой датчик и мерять с помощью ADC вот я ковырял такое например https://www.youtube.com/watch?v=KD1BGVeIyhA.
Я взял ваш код с копировал в демо CodevisionAVR он меня тоже нафиг послал сказал, что много кода - много библиотеки подтягивают.

Мож ошибаюсь поправьте если че. Тока не пинать. :kill:
Аватара пользователя
Cheburator
Грызет канифоль
Сообщения: 264
Зарегистрирован: Пт дек 07, 2012 22:50:01
Откуда: Moscow

Re: CodeVision AVR в вопросах и ответах

Сообщение Cheburator »

Все верно. Но хотелось использовать именно tiny13a и ds18b20. Согласен, не самое лучшее и экономичное решение, но причин на это 3. Первая - у меня того и другого много. :) Вторая - tiny13 в soic8 - очень компактная, что во многих случаях важно. Ну, и третья причина, пожалуй, основная - желание докопаться до истины. Ибо если этот МК не может справится с такой, на мой взгляд, элементарной задачей, то не понятно, что он вообще может. А это, в свою очередь, означает, что это я что-то не так делаю. Вот я и хочу разобраться.
Последний раз редактировалось Cheburator Вс дек 13, 2015 22:34:56, всего редактировалось 2 раза.
А что подумал Кролик, никто не узнал, потому что он был очень воспитанный.
Ответить

Вернуться в «AVR»