|
Это глюк компилятора? (CVAVR), потеря одного параметра |
|
|
|
Apr 29 2007, 18:13
|
Частый гость
 
Группа: Свой
Сообщений: 97
Регистрация: 25-04-06
Из: Краснодар
Пользователь №: 16 451

|
Писал следующую функцию (выводит измеренное АЦП напр. на индикатор): Код 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'); } Всё стало работать как надо Такое впечатление, что ftoa портит параметр x, хотя никаким боком его не пользует. От чего это может быть? P.S. (пользую CVAVR 1.24.8d Prof.)
|
|
|
|
|
 |
Ответов
|
Apr 29 2007, 19:38
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(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
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Apr 29 2007, 21:03
|
Частый гость
 
Группа: Свой
Сообщений: 97
Регистрация: 25-04-06
Из: Краснодар
Пользователь №: 16 451

|
Цитата(ReAl @ Apr 29 2007, 20:38)  А ты уверен, что ftoa не 5 байт в массив str[] пишет? Может, как раз концевой "0" и попадает в x В точку! Задал str[5], и всё стало нормально. Ещё раз хелп на кодевижн посмотрел, там нет ничего об этом. И всё-таки, это глюк компилятора, или так и должно быть (оптимизацию отключал, не помогало)?
|
|
|
|
|
Apr 30 2007, 02:36
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(singlskv @ Apr 30 2007, 00:31)  ну все-таки в C вроде как нет типа String  В C есть понятие "строковой литерал" "Строковые литералы Синтаксис: "символы"["символы"]... Строковый литерал это последовательность символов из представительной таблицы символов, которая заключена в двойные цитатные скобки. Например, строковый литерал может быть таким: "This is f string literal." .... ... Строковые литералы имеют тип массива char (char[]). Это значит, что строка это массив элементов типа char. Число элементов массива равно числу символов в строке плюс один для заканчивающего пустого символа. " Так что курить кроме стандарта языка С ничего не надо.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|