Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Это глюк компилятора? (CVAVR)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
invertor79
Писал следующую функцию (выводит измеренное АЦП напр. на индикатор):

Код
void lcd_print_adc_level_volt(uchar y, uchar x)
{
    uchar str[4];
    
    ftoa(ADC_Read(CH_2)*ADC_V, 2, str);
    
    print_string(y, x, str);
    
    print_char(y, x+CHAR_W*4, 'V');
}


в этом случае параметр x всегда равен 0 оказывается, параметр y передается нормально.

Переписал так:
Код
void lcd_print_adc_level_volt(uchar y, uchar x)
{
    uchar str[4];
    uchar temp;

            temp = x;

    ftoa(ADC_Read(CH_2)*ADC_V, 2, str);
    
    print_string(y, temp, str);
    
    print_char(y, temp+CHAR_W*4, 'V');
}


Всё стало работать как надо blink.gif

Такое впечатление, что ftoa портит параметр x, хотя никаким боком его не пользует. От чего это может быть?

P.S. (пользую CVAVR 1.24.8d Prof.)
ReAl
Цитата(invertor79 @ Apr 29 2007, 17:13) *
Писал следующую функцию (выводит измеренное АЦП напр. на индикатор):
Код
void lcd_print_adc_level_volt(uchar y, uchar x)
{
    uchar str[4];
    ftoa(ADC_Read(CH_2)*ADC_V, 2, str);
    print_string(y, x, str);
    print_char(y, x+CHAR_W*4, 'V');
}


Такое впечатление, что ftoa портит параметр x, хотя никаким боком его не пользует. От чего это может быть?

P.S. (пользую CVAVR 1.24.8d Prof.)
А ты уверен, что ftoa не 5 байт в массив str[] пишет?
Может, как раз концевой "0" и попадает в x
WHALE
Или размер стека недостаточен.
invertor79
Цитата(ReAl @ Apr 29 2007, 20:38) *
А ты уверен, что ftoa не 5 байт в массив str[] пишет?
Может, как раз концевой "0" и попадает в x


В точку! Задал str[5], и всё стало нормально.
Ещё раз хелп на кодевижн посмотрел, там нет ничего об этом.
И всё-таки, это глюк компилятора, или так и должно быть (оптимизацию отключал, не помогало)?
singlskv
Цитата(invertor79 @ Apr 29 2007, 22:03) *
В точку! Задал str[5], и всё стало нормально.
Ещё раз хелп на кодевижн посмотрел, там нет ничего об этом.
И всё-таки, это глюк компилятора, или так и должно быть (оптимизацию отключал, не помогало)?

это глюк пользователя стандартной С библиотеки
хелп нужно курить не на компилятор а на библиотеку
zltigo
Цитата(singlskv @ Apr 30 2007, 00:16) *
это глюк пользователя стандартной С библиотеки
хелп нужно курить не на компилятор а на библиотеку

Ничего курить по ни по библиотекам ни по компиляторам не надо - стриг он и в африке стринг - нулем кончается.
singlskv
Цитата(zltigo @ Apr 30 2007, 02:07) *
Ничего курить по ни по библиотекам ни по компиляторам не надо - стриг он и в африке стринг - нулем кончается.

ну все-таки в C вроде как нет типа String smile.gif
так что курить нужно таки в сторону стандартных С библиотек smile.gif

или я чего-то недопонимаю ?
defunct
Цитата(singlskv @ Apr 30 2007, 00:31) *
ну все-таки в C вроде как нет типа String smile.gif

В C есть понятие "строковой литерал"

"Строковые литералы

Синтаксис: "символы"["символы"]...

Строковый литерал это последовательность символов из представительной таблицы символов, которая заключена в двойные цитатные скобки. Например, строковый литерал может быть таким:

"This is f string literal."

....
...

Строковые литералы имеют тип массива char (char[]). Это значит, что строка это массив элементов типа char. Число элементов массива равно числу символов в строке плюс один для заканчивающего пустого символа. "

Так что курить кроме стандарта языка С ничего не надо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.