Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Запутался в указателях

Непрочитано 19.12.2012, 22:12  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Запутался в указателях

А по теме топика - смысл следующий...
В описанной Вами процедуре Вы не используете массив. Зачем тогда его там объявлять? Правильным является объявление переменных там, где Вы их используете. И именно там. Это и функционально и наглядно.
Кроме того, язык Си, позволяет многое, но есть так сказать "правила установившейся практики". Эти правила рекомендуют функционально разбивать задачу на части. Как правило каждая часть имеет "c" и "h" файлы с одним и тем же именем. Если Вы применяете массив, который увязан с таким блоком, то имеет смысл, создавать этот массив глобальным в этом функциональном блоке. И объявлять его в начале файла с тем же static, для локальности. Данное правило не распространяется для работы из под ОС. Там чаще применяют Объявление переменных в задаче или вызывающей ф-ции.
===
Итак смысл в том, что Вам предпочтительней объявить массив там где вы его используете, а в Вашу ф-цию передать указатель на данный массив.
Реклама:
SasaVitebsk вне форума  
Непрочитано 20.12.2012, 00:40  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Запутался в указателях

Сообщение от whoim Посмотреть сообщение
Boba_spb не решает конкретно эту проблему.. ничего лучше не придумал. Задача - переводить в строки числа от uint8 до uint32. Кстати пробовал нагугленный синтаксис подстановки в формат своего числа, не захотело работать сцуко, пытался долго. Может, подскажете как?
Не понимаю в чем проблема.

ну заведите буфер, сформируйте в ней строку. И передавайте буфер.

Что то типа такого
char buf[256];

void SetLine( char *pt, uint8 a. uint16 b, uint32 c)
{
int uk=0;
char *pString=pt;
pString += sprintf ( pString, "CHAR=%03u\n\r" ,a);
pString += sprintf ( pString, "SHORT=%05u\n\r" ,b);
pString += sprintf ( pString, "LONG= %010ul\n\r" ,c);
pString += sprintf ( pString, "Привет Волку !!!\n\r");

}
///======================

ну и пользйте далее
SetLine(buf, 255,xFFFF,0xFFFFFFFF);
SendToRs(buf);
Boba_spb вне форума  
Сказали "Спасибо" Boba_spb
whoim (20.12.2012)
Непрочитано 20.12.2012, 07:30  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: Запутался в указателях

Сообщение от SasaVitebsk Посмотреть сообщение
Если Вы применяете массив, который увязан с таким блоком, то имеет смысл, создавать этот массив глобальным в этом функциональном блоке. И объявлять его в начале файла с тем же static, для локальности.
===
Итак смысл в том, что Вам предпочтительней объявить массив там где вы его используете, а в Вашу ф-цию передать указатель на данный массив.
Так и сделал, потестирую - в этом ли дело было с "иногда перезагрузками"
whoim вне форума  
Непрочитано 20.12.2012, 07:34  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: Запутался в указателях

Сообщение от Boba_spb Посмотреть сообщение
Не понимаю в чем проблема.

ну заведите буфер, сформируйте в ней строку. И передавайте буфер.

Что то типа такого
char buf[256];

void SetLine( char *pt, uint8 a. uint16 b, uint32 c)
{
int uk=0;
char *pString=pt;
pString += sprintf ( pString, "CHAR=%03u\n\r" ,a);
pString += sprintf ( pString, "SHORT=%05u\n\r" ,b);
pString += sprintf ( pString, "LONG= %010ul\n\r" ,c);
pString += sprintf ( pString, "Привет Волку !!!\n\r");

}
///======================

ну и пользйте далее
SetLine(buf, 255,xFFFF,0xFFFFFFFF);
SendToRs(buf);
си не критичен к непередаче параметра?) мне же не все сразу, а по очереди. Но в таком случае придется ту же проверку case вводить, что не имеет смысла - проще не станет. А вот передача указателя - понял, реализую
whoim вне форума  
Непрочитано 20.12.2012, 10:22  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Запутался в указателях

Может Вы такое хотите?
void sprin(char *bf, void *v,int n)
{
switch(n)
{
case 1:
sprintf(bf, "%03u", (Int8U)(*(Int8U *)v)); break;
case 2:
sprintf(bf, "%05u", (Int16U)(*(Int16U *)v)); break;
case 4:
sprintf(bf, "%010u", (Int32U)(*(Int32U *)v)); break;
case 8:
sprintf(bf, "%020u", (Int64U)(*(Int64U *)v)); break;

}

}


int main(void)
{
char bf[256];
Int8U i8=255;
Int16U i16=255;
Int32U i32=255;
Int64U i64=255;
sprin(bf, &i8, sizeof(i);
sprin(bf, &i16, sizeof(i16));
sprin(bf, &i32, sizeof(i32));
sprin(bf, &i64, sizeof(i64));
}
Boba_spb вне форума  
Непрочитано 21.12.2012, 12:06  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: Запутался в указателях

Boba_spb, видимо да, спасибо Счас разберу
whoim вне форума  
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DS1307 запутался SerGO_83 Микроконтроллеры, АЦП, память и т.д 11 12.09.2012 10:54
Запутался в даташитах KOL151 Микроконтроллеры, АЦП, память и т.д 23 15.06.2011 11:44
С арифмметика. Запутался приведениях типов AndryG Микроконтроллеры, АЦП, память и т.д 3 10.12.2009 21:56
Программаторы... Запутался совсем. Elya Микроконтроллеры, АЦП, память и т.д 46 09.10.2009 09:00


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


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