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

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

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

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

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

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

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 08.10.2007, 17:17  
Hoksmur
Частый гость
 
Регистрация: 16.05.2005
Сообщений: 21
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Hoksmur на пути к лучшему
По умолчанию Знатоки Си, помогите: Как обьявить функцию?

Возвращающую указатель на структуру, которая содержит указатель на структуру такого же типа?
Код:
struct dump 
{
 unsigned char    idstr[8];    //Строка для сравнения
 struct dump         *next;    //указатель на след. структуру
 uint8_t             shift;    // in EE: смещение счетчика
 uint8_t       *counter[0];    // в ЕЕ: счетчик в виде строки
 uint8_t	       stb;
 uint8_t	  hex[110];
};
А вот попытка обьявить прототип.
Код:
struct dump *findchip( struct *dump this);
Код:
struct dump *findchip( void);
проглатывает.
Может через typedef как то? Или union? Вот только как?
Реклама:
Hoksmur вне форума  
Непрочитано 08.10.2007, 19:54  
Hoksmur
Частый гость
 
Регистрация: 16.05.2005
Сообщений: 21
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Hoksmur на пути к лучшему
По умолчанию

Выяснил ещё поппутно другое - объясните, как работать со структурами, размещенными в памяти программ?
Код:
PGM_VOID_P findchip( struct dump PROGMEM *this)
{
 35a:   f9 2f           mov     r31, r25
 35c:   e8 2f           mov     r30, r24
 35e:   80 85           ldd     r24, Z+8        ; 0x08
 360:   91 85           ldd     r25, Z+9        ; 0x09
 362:   08 95           ret

00000364 ‹wait16›:
 364:   80 ea           ldi     r24, 0xA0       ; 160
 366:   9f e0           ldi     r25, 0x0F       ; 15
 368:   01 97           sbiw    r24, 0x01       ; 1
 36a:   f1 f7           brne    .-4             ; 0x368 ‹wait16+0x4›
 36c:   08 95           ret
То есть он явно пытается разместить структуру в RAM, о чём и пишет при компиляции в варнингах.
Hoksmur вне форума  
Непрочитано 08.10.2007, 22:40  
ices
Частый гость
 
Регистрация: 02.04.2007
Сообщений: 37
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
ices на пути к лучшему
По умолчанию Re: Знатоки Си, помогите: Как обьявить функцию?

Сообщение от Hoksmur
Код:
struct dump *findchip( struct dump * this);
Звездочка не в том месте.
ices вне форума  
Непрочитано 08.10.2007, 22:49  
ices
Частый гость
 
Регистрация: 02.04.2007
Сообщений: 37
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
ices на пути к лучшему
По умолчанию

Сообщение от Hoksmur
Выяснил ещё поппутно другое - объясните, как работать со структурами, размещенными в памяти программ?
Код:
PGM_VOID_P findchip( struct dump PROGMEM *this)
Какой компилятор?
в иаре делается так:
Код:
__flash struct dump this;
теперь структура this располагается во флеше, но в качестве параметра для функции
Код:
struct dump *findchip( struct dump * this);
ее передавать нельзя, для этого функцию надо писать другую (или еще одну, или эту поправить):
Код:
struct dump *findchip( __flash struct dump * this);
Надо еще не забыть в проге проинициализировать эту струкутуру, в процессе выполения там уже должны быть данные (т.е. их програматор прошивает):
Код:
__flash struct dump this=
{
 'asdf',    //Строка для сравнения 
 &next;    //указатель на след. структуру 
 shift;    // in EE: смещение счетчика 
 counter;    // в ЕЕ: счетчик в виде строки 
 stb; 
 hex; 
};
ices вне форума  
Непрочитано 09.10.2007, 19:36  
Hoksmur
Частый гость
 
Регистрация: 16.05.2005
Сообщений: 21
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Hoksmur на пути к лучшему
По умолчанию

Спасибо, здОрово помог. Ещё бы как обьявить функцию, возвращающую указатель на флэш?
Компилятор - WinAVR, поэтому __flash заменю yf PROGMEM.
Со звёздочкой не совсем понял, что не так.
Hoksmur вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как использовать функцию printf для выовода на второй USART igla_85 Микроконтроллеры, АЦП, память и т.д 1 01.06.2009 02:35
как написать макрос-функцию в Си Winavr serb-radio Микроконтроллеры, АЦП, память и т.д 7 30.09.2008 11:08
Знатокам С! Как передать в функцию порт? arkbox Микроконтроллеры, АЦП, память и т.д 52 26.02.2008 17:06
CVAVR передача в функцию PORTА.X как переменную woroba Микроконтроллеры, АЦП, память и т.д 5 10.12.2007 12:49
CVAVR как программно вызвать функцию обработки прерывания??? woroba Микроконтроллеры, АЦП, память и т.д 7 07.03.2007 11:54


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot