Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

Уроки СИ для AVR микроконроллеров

Непрочитано 23.08.2012, 21:47  
nonamedov
Почётный гражданин KAZUS.RUN
 
Регистрация: 06.06.2008
Сообщений: 1,519
Сказал спасибо: 76
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Сообщение от Yurkin2007 Посмотреть сообщение
к тому же они не ответили на вопрос ТС о неработающей программе и увели дискуссию в сторону...
Ответ уже дан в #827,
напомню сообщение об ошибке компилятора.
Сообщение от papa_n Посмотреть сообщение
Error: D:\Project_CV_encode\main.c(81): incomplete type is not allowed
А ошибались Вы тут:
Сообщение от Yurkin2007 Посмотреть сообщение
И хорошо бы придумывать разные имена для формальных параметров и действительных переменных. А то у Вас всё data и data ...
Давать такие имена можно, ошибка была не в этом.
Ну, еще и этот совет абсолютно бессмысленный:
Сообщение от Yurkin2007 Посмотреть сообщение
Нужно передавать ссылку на массив
Код:
char EncodeData(char data[])
Реклама:

Последний раз редактировалось nonamedov; 23.08.2012 в 21:54.
nonamedov вне форума  
Сказали "Спасибо" nonamedov
dosikus (23.08.2012)
Непрочитано 23.08.2012, 21:53  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Сообщение от Yurkin2007 Посмотреть сообщение
ТС объявил массив data, ... и определяет его длину как
Код:
len=sizeof(data);
прекрасно представляя себе, что размер элемента равен 1 байту.
На самом деле, ТС написал так:
Код:
char EncodeData(char *data)
{
len=sizeof(data)/3;

    for(i=0; i‹len; i++)
    {
        a0 = data[i*3];
        ...
    }
    return *sms;
}
то есть, ни о каком "прекрасно представляя себе" даже речи не шло, хоть и не всем это очевидно.
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Сказали "Спасибо" tempora
dosikus (23.08.2012)
Непрочитано 23.08.2012, 22:49  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Не, ну, вдвоем на одного навалились. И примкнувший к ним супермодератор.
Ладно, согласен. Впредь при определении размера массива буду писать: len=sizeof(arr)/sizeof(arr[0])
Yurkin2007 вне форума  
Непрочитано 23.08.2012, 23:13  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Есть и другое объяснение - тебе "кривые кирпичи подсунули".
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 24.08.2012, 09:08  
kosmos440o
Заблокирован
 
Регистрация: 23.09.2007
Сообщений: 761
Сказал спасибо: 84
Сказали Спасибо 352 раз(а) в 151 сообщении(ях)
kosmos440o на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Если исходные данные для массива - строка, то можно использовать strlen, или преобразовать массив в строку
kosmos440o вне форума  
Непрочитано 24.08.2012, 12:18  
mimuh64
Прописка
 
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
mimuh64 на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Я сейчас вам подолью масла в огонь....
Парни ну почему нельзя просто написать...
Оператор sizeof применять в функции (при таком определении) нельзя, потому что передача массива в функцию методом указателя будет передавть адрес в sizeof - таким образом мы будем получать размер адреса (например, два байта, все зависит от области памяти МК). И Yurkin2007 об этом уже писал (пост 815).
Я неспроста писал что нужно глобальное обращение к массиву (по его конкретному имени) если применять sizeof в функции. Но при этом теряется смысл функции в таком виде как ее видит вопрошающий.
Если массивов несколько, то sizeof нужно применять перед вызовом функции, а сам sizeof из нее убрать... Например такое обращение
DL = EncodeData (sizeof data);, а в функции len=data/3; (если параметр определен как char data).
Надеюсь доходчиво...
Три страницы флуда....
Миниатюры:
Нажмите на изображение для увеличения
Название: mmm.jpg
Просмотров: 43
Размер:	252.4 Кб
ID:	38029  

Последний раз редактировалось mimuh64; 24.08.2012 в 13:15.
mimuh64 вне форума  
Непрочитано 24.08.2012, 13:52  
tempora
Почётный гражданин KAZUS.RUN
 
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Сообщение от mimuh64 Посмотреть сообщение
Парни ну почему нельзя просто написать...
Сейчас попробую проиллюстрировать, почему этого не вышло.

Сообщение от mimuh64 Посмотреть сообщение
Я взял кусок твоего примера - компилируется и работает...
Не работает - никак! О чем я и написал, а спустя страницу в этом убедился и ТС.

Сообщение от Yurkin2007 Посмотреть сообщение
У Вас параметр data есть указатель на char, а совсем не массив. ... Нужно передавать ссылку на массив
Код:
char EncodeData(char data[])
...
Тоже "дельный совет" - поставить вместо ссылки на char, ссылку на char, записанную "другими словами".

Сообщение от mimuh64 Посмотреть сообщение
И Yurkin2007 об этом уже писал (пост 815).
Качество того "совета" уже обсудили и пришли к неутешительному выводу - очень хочется пойти по второму кругу?

Сообщение от mimuh64 Посмотреть сообщение
Надеюсь доходчиво...
Это нетрудно проверить:
Сообщение от mimuh64 Посмотреть сообщение
Оператор sizeof применять в функции (при таком определении) нельзя
Применять sizeof в функции - можно; можно где угодно, если знать что он возвращает. Обсуждавшаяся беда заключалась в том, что sizeof неверно использовали для получения размерности массива (и в, и вне функции).
Сообщение от mimuh64 Посмотреть сообщение
передача массива в функцию методом указателя
Это что за метод такой, "метод указателя"? Попробуем предположить, что имелась ввиду передача по ссылке.
Сообщение от mimuh64 Посмотреть сообщение
таким образом мы будем получать размер адреса
Размер адреса таким образом не получить. Вероятно, имелся ввиду размер указателя?
Сообщение от mimuh64 Посмотреть сообщение
Я неспроста писал что нужно глобальное обращение к массиву ... Но при этом теряется смысл ...
Советы, приводящие к потере смысла - бессмысленны. От них лучше воздерживаться.
Суммируем - ни одна мысль не выражена правильно, но в целом да - очень доходчиво.

Сообщение от mimuh64 Посмотреть сообщение
Три страницы флуда....
Именно! И все вашими молитвами - один уверяет, что "всё работает", когда нифига не работает, другой даёт совет заменить указатель на... указатель же(!), дескать, "вот тогда будет щастье", первый тут же подхватывает и предлагает объявить массив глобально, чтобы вообще не передавать его параметром ("нет параметра - нет проблемы"), оба дают советы по использованию sizeof, которые, в силу смутности понимания, перестают работать при малейшем "шаг влево, шаг вправо" и так далее. И вот теперь - этот последний пост #836, пытающийся представить чёрное белым; и всё это - вместо того, чтобы просто взять из #810 название раздела и переписать свой код согласно тому, что там написано. Вы классно потратили время! Поздравляю!
__________________
There's always more than one way to skin a cat.
tempora вне форума  
Непрочитано 24.08.2012, 14:12  
mimuh64
Прописка
 
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
mimuh64 на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Да.... Вы мастер флудить. По поводу работает или не работает, внимательно посмотрите первичный вопрос, в том ключе - мой пример (первый) работает (или Вы картинку не видите?). По поводу применения sizeof в функции - это уже другой пример (автор расширил свой вопрос). Но от Вас я так его (пример) и не увидел.
"Советы, приводящие к потере смысла - бессмысленны." - да Вы философ (или любитель наслаждаться своим литературным изысканием), не лучше ли просто написать пример и показать автору ошибки, чем упражняться в написании памфлетов...
Класно потратили время Вы, и я Вас поздравляю!!!

Последний раз редактировалось mimuh64; 24.08.2012 в 15:40. Причина: Мистер tempora любит обращение на Вы (Извиняюсь...)
mimuh64 вне форума  
Непрочитано 24.08.2012, 14:18  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Сообщение от mimuh64 Посмотреть сообщение
не лучше ли просто написать пример и показать автору ошибки,
Медвежья услуга .
Надо не готовое подсовывать а думать учить ...
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 24.08.2012, 14:25  
mimuh64
Прописка
 
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
mimuh64 на пути к лучшему
По умолчанию Re: Уроки СИ для AVR микроконроллеров

Сообщение от dosikus Посмотреть сообщение
Медвежья услуга .
Надо не готовое подсовывать а думать учить ...
Воистину... полностью согласен. Но вопрашающий показал свое творение, ни грех и поправить реальным примером.
mimuh64 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Видео уроки dosikus Микроконтроллеры, АЦП, память и т.д 61 23.01.2012 21:06
Видео уроки (flash) Proteus 7.1 fmssp Proteus 5 13.08.2007 03:56
AVR уроки Рюмика chipic128 Proteus, KiCAD и другие ECAD 9 07.03.2007 21:46
уроки от LABCENTRE(PIC12F675+C) dosikus Микроконтроллеры, АЦП, память и т.д 22 09.10.2006 10:16


Часовой пояс GMT +4, время: 15:46.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.