[an error occurred while processing this directive]
*ports[0] = 15; Надо разименовать указатель, выбранный из массива указателей. (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено ReAl 13 ноября 2006 г. 15:15
В ответ на: это будет работать? (+) отправлено <font color=gray>507</font> 13 ноября 2006 г. 14:43

Ну вот так будет.


#include
#include

typedef struct {
volatile uint8_t *port, *dir, *pin;
} avrport_t;

const avrport_t pa = { &PORTA, &DDRA, &PINA };
const avrport_t pe = { &PORTE, &DDRE, &PINE };

uint8_t ta, te;

uint8_t moo(const avrport_t *ap, uint8_t b) {
*ap->port = b;
return *ap->pin;
}

uint8_t foo(void) {
*pa.dir = 0x0F;
*pa.port = 0x0A;
ta = *pa.pin;
return moo( &pe, 0xCC);
}

//////////////

.file "p.c"
.arch atmega128
__SREG__ = 0x3f
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__tmp_reg__ = 0
__zero_reg__ = 1
.global __do_copy_data
.global __do_clear_bss
.global pe
.data
.type pe, @object
.size pe, 6
pe:
.word 35
.word 34
.word 33
.global pa
.type pa, @object
.size pa, 6
pa:
.word 59
.word 58
.word 57
.text
.global moo
.type moo, @function
moo:
/* prologue: frame size=0 */
push r28
push r29
/* prologue end (size=2) */
movw r26,r24
ld r30,X+
ld r31,X
sbiw r26,1
st Z,r22
movw r28,r26
ldd r30,Y+4
ldd r31,Y+5
ld r24,Z
clr r25
/* epilogue: frame size=0 */
pop r29
pop r28
ret
/* epilogue end (size=3) */
/* function moo size 15 (10) */
.size moo, .-moo
.global foo
.type foo, @function
foo:
/* prologue: frame size=0 */
/* prologue end (size=0) */
lds r30,pa+2
lds r31,(pa+2)+1
ldi r24,lo8(15)
st Z,r24
lds r30,pa
lds r31,(pa)+1
ldi r24,lo8(10)
st Z,r24
lds r30,pa+4
lds r31,(pa+4)+1
ld r24,Z
sts ta,r24
ldi r22,lo8(-52)
ldi r24,lo8(pe)
ldi r25,hi8(pe)
call moo
clr r25
/* epilogue: frame size=0 */
ret
/* epilogue end (size=1) */
/* function foo size 26 (25) */
.size foo, .-foo
.comm ta,1,1
.comm te,1,1
/* File "p.c": code 41 = 0x0029 ( 35), prologues 2, epilogues 4 */


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание