Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
08.10.2007, 17:17
|
|
Частый гость
Регистрация: 16.05.2005
Сообщений: 21
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Знатоки Си, помогите: Как обьявить функцию?
Возвращающую указатель на структуру, которая содержит указатель на структуру такого же типа?
Код:
|
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? Вот только как?
|
|
|
|
08.10.2007, 19:54
|
|
Частый гость
Регистрация: 16.05.2005
Сообщений: 21
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Выяснил ещё поппутно другое - объясните, как работать со структурами, размещенными в памяти программ?
Код:
|
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, о чём и пишет при компиляции в варнингах.
|
|
|
|
08.10.2007, 22:40
|
|
Частый гость
Регистрация: 02.04.2007
Сообщений: 37
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Знатоки Си, помогите: Как обьявить функцию?
Сообщение от Hoksmur
|
Код:
|
struct dump *findchip( struct dump * this); |
|
Звездочка не в том месте.
|
|
|
|
08.10.2007, 22:49
|
|
Частый гость
Регистрация: 02.04.2007
Сообщений: 37
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Сообщение от 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;
}; |
|
|
|
|
09.10.2007, 19:36
|
|
Частый гость
Регистрация: 16.05.2005
Сообщений: 21
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Спасибо, здОрово помог. Ещё бы как обьявить функцию, возвращающую указатель на флэш?
Компилятор - WinAVR, поэтому __flash заменю yf PROGMEM.
Со звёздочкой не совсем понял, что не так.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
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.
|
|