Например TDA7294

Форум РадиоКот • Просмотр темы - Вопрос: CVAVR, код, как сделать гибкую инициализацию
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс апр 12, 2026 13:54:12

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос: CVAVR, код, как сделать гибкую инициализацию
СообщениеДобавлено: Вт авг 11, 2020 23:15:43 
Открыл глаза
Аватар пользователя

Карма: 2
Рейтинг сообщений: 6
Зарегистрирован: Пн июн 11, 2007 14:16:06
Сообщений: 71
Откуда: Таганрог
Рейтинг сообщения: 0
Занимаюсь на любительском уровне, отсюда и вопросы. Не знаю как реализовать код.

1) Имеем к примеру контроллер атмега, разведенный на N одинаковых слотов, по 3 порта на слот.
платформа1_слот1_пин1 - PORTA.1, платформа1_слот1_пин2 - PORTA.2, платформа1_слот1_пин3 - PORTA.3
платформа1_слот2_пин1 - PORTC.1, платформа1_слот2_пин2 - PORTC.2, платформа1_слот2_пин3 - PORTC.3

2) Имеем к примеру модуль, который можно вставить в любой слот и у модуля есть 3 пина
модуль1_пин1 - CLOCK, модуль1_пин2 - DATA, модуль1_пин3 - CS

Как через директивы, указатели или что-то еще реализовать инициализацию типа:
#define платформа1, т.е. обозначить что используется именно такая платформа, где-то инклуде прописаны все имеющиеся в ней слоты и их порты
#define слот1 модуль1, т.е. указать что в слоте 1 этой платформы стоит именно этот модуль1, в инклуде которого также прописано соответствие пинов и назначение

Чтобы в результате CLOCK, DATA и CS заменялись компилятором на соответствующие порты.
В идеале, также чтобы и конфигурирование портов на вход/выход и подтяжки сразу производилось.
Чтобы не заниматься кофигурированием вручную.

Хотя бы направление подскажите: директивы, указатели, структуры или что там еще, почитаю. Про указатели читал, но так и не догнал до конца принцип.

_________________
Канифоли много не бывает!


Вернуться наверх
 
 Заголовок сообщения: Re: Вопрос: CVAVR, код, как сделать гибкую инициализацию
СообщениеДобавлено: Ср авг 12, 2020 08:01:47 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18549
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
если в коде применяется только одна платформа, и смешение платформ никогда не предусматривается, то все элементарно:
Код:
#if defined(PLATFORM1)
  #include "platform1.h"
#elif defined(PLATFOM2)
  #include "platform2.h"
#elif defined(PLATFORM3)
  #include "platform3.h"
#else
  #error Unknown platform!
#endif
делаете нужное количество заголовков platformx.h, в которых описываете одинаковые макросы CLOCK, DATA и т.п. с разными пинами, портами и т.п. штуками, а потом перед указанным кодом просто описываете макрос для нужной в текущий момент платформы типа так #define PLATFORM3

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
 Заголовок сообщения: Re: Вопрос: CVAVR, код, как сделать гибкую инициализацию
СообщениеДобавлено: Ср авг 12, 2020 10:14:17 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
Цитата:
В идеале, также чтобы и конфигурирование портов на вход/выход и подтяжки сразу производилось.
Чтобы не заниматься кофигурированием вручную.

А вы в дефайнах определяете нужные порты и пины, как ARV подсказал вам. А уже дальше их конфигурируете в .c файле уже по именам, заданных в .h, которые разные через #ifdef. Главное не конфигурируйте в .h файлах - плохая практика.


Вернуться наверх
 
 Заголовок сообщения: Re: Вопрос: CVAVR, код, как сделать гибкую инициализацию
СообщениеДобавлено: Ср авг 12, 2020 14:04:17 
Открыл глаза
Аватар пользователя

Карма: 2
Рейтинг сообщений: 6
Зарегистрирован: Пн июн 11, 2007 14:16:06
Сообщений: 71
Откуда: Таганрог
Рейтинг сообщения: 0
если в коде применяется только одна платформа, и смешение платформ никогда не предусматривается, то все элементарно....


Спасибо за ответ :beer:
Но, или я не понял ответа, или вы - задачу.
Ваше решение - это лишь часть требуемого функционала.

Смешение платформ не предусматривается, как определить платформу через define и описать набор ее портов я понимаю.

Я ищу решение другой задачи:
- у платформы i слотов;
- у меня есть j типов разных модулей.
Соответственно на базе одной платформы я могу собрать любую комбинацию, хоть 10 одинаковых модулей, хоть 10 разных.
Соответственно, если по простому описывать, мне нужно втупую расписать все возможные комбинации в каждом хэдере на платформу, что грустно.

Я пытаюсь найти решение, которое позволит связать:
-тип платформы;
-тип модуля;
-позицию установки модуля;
воедино, тем самым автоматически определив на какой порт контроллера приходится какой пин исполнительного устройства в модуле.

Если 10 модулей будут одинаковые, полагаю буду оперировать функцией, которая требует указания номера модуля, к которому идет обращение.

Сейчас мысль посетила:
Попробую определить все поле платформы как двумерный массив пинов слотов.
Далее к каждому элементу массива прописать конкретный порт атмеги.
Далее при инициализации какого-то типа модуля указывать номер слота в который его включить.
И далее уже математическими методами связать конкретные функциональные ножки модуля с конретными портами контроллера через этот массив....

Спасибо за идею :)

_________________
Канифоли много не бывает!


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения: Re: Вопрос: CVAVR, код, как сделать гибкую инициализацию
СообщениеДобавлено: Ср авг 12, 2020 14:57:11 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2119
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18549
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
я и в самом деле не очень понял, что вы там затеваете.
но предполагал так:
1. материнская плата у вас имеет порты, условно именованные P1, P2 и т.д.
2. навесные модули у вас имеют свои входы-выходы, именованные как-то типа IN1, IN2, OUT1, OUT2...
3. каждый навесной модуль имеет свой заголовочный файл, где константе IN1 задается "символьное" название сигнала материнской платы P1
4. в коде вы работаете только с символами модуля, который в текущей конфигурации выбран, то есть как бы пишите код под модуль, а то, как с ним работает материнская плата, получается автоматически.

в этом случае для модуля "радио" линии SDA и SCL будут определены, например, как P1 и P2. а для модуля "термодатчик" - те же самые SDA и SCL будут уже P3 и P4. код для работы с I2C всегда будет использовать SDA и SCL, но в зависимости от того, какой модуль вы "надели" на материнку, физическая работа будет вестись именно с теми пинами, которые нужны модулю.

Добавлено after 3 minutes 27 seconds:
и еще: чем универсальнее решение, тем неудобнее им пользоваться на практике

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
 Заголовок сообщения: Re: Вопрос: CVAVR, код, как сделать гибкую инициализацию
СообщениеДобавлено: Ср авг 12, 2020 15:19:21 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
slesar, хмм... похоже что вы пытаетесь сделать что-то вроде номеров пинов в ардуино. Посмотрите в исходниках как там это сделано:

СпойлерArduino.h:
Код:
// Get the bit location within the hardware port of the given virtual pin.
// This comes from the pins_*.c file for the active board configuration.
//
// These perform slightly better as macros compared to inline functions
//
#define digitalPinToPort(P) ( pgm_read_byte( digital_pin_to_port_PGM + (P) ) )
#define digitalPinToBitMask(P) ( pgm_read_byte( digital_pin_to_bit_mask_PGM + (P) ) )
#define digitalPinToTimer(P) ( pgm_read_byte( digital_pin_to_timer_PGM + (P) ) )
#define analogInPinToBit(P) (P)
#define portOutputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_output_PGM + (P))) )
#define portInputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_input_PGM + (P))) )
#define portModeRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_mode_PGM + (P))) )


pins_arduino.h от Arduino Mega:
Код:
#define PIN_A0   (54)
#define PIN_A1   (55)
#define PIN_A2   (56)
#define PIN_A3   (57)
#define PIN_A4   (58)
#define PIN_A5   (59)
#define PIN_A6   (60)
#define PIN_A7   (61)
#define PIN_A8   (62)
#define PIN_A9   (63)
#define PIN_A10  (64)
#define PIN_A11  (65)
#define PIN_A12  (66)
#define PIN_A13  (67)
#define PIN_A14  (68)
#define PIN_A15  (69)

static const uint8_t A0 = PIN_A0;
static const uint8_t A1 = PIN_A1;
static const uint8_t A2 = PIN_A2;
static const uint8_t A3 = PIN_A3;
static const uint8_t A4 = PIN_A4;
static const uint8_t A5 = PIN_A5;
static const uint8_t A6 = PIN_A6;
static const uint8_t A7 = PIN_A7;
static const uint8_t A8 = PIN_A8;
static const uint8_t A9 = PIN_A9;
static const uint8_t A10 = PIN_A10;
static const uint8_t A11 = PIN_A11;
static const uint8_t A12 = PIN_A12;
static const uint8_t A13 = PIN_A13;
static const uint8_t A14 = PIN_A14;
static const uint8_t A15 = PIN_A15;

// A majority of the pins are NOT PCINTs, SO BE WARNED (i.e. you cannot use them as receive pins)
// Only pins available for RECEIVE (TRANSMIT can be on any pin):
// (I've deliberately left out pin mapping to the Hardware USARTs - seems senseless to me)
// Pins: 10, 11, 12, 13,  50, 51, 52, 53,  62, 63, 64, 65, 66, 67, 68, 69

#define digitalPinToPCICR(p)    ( (((p) >= 10) && ((p) <= 13)) || \
                                  (((p) >= 50) && ((p) <= 53)) || \
                                  (((p) >= 62) && ((p) <= 69)) ? (&PCICR) : ((uint8_t *)0) )

#define digitalPinToPCICRbit(p) ( (((p) >= 10) && ((p) <= 13)) || (((p) >= 50) && ((p) <= 53)) ? 0 : \
                                ( (((p) >= 62) && ((p) <= 69)) ? 2 : \
                                0 ) )

#define digitalPinToPCMSK(p)    ( (((p) >= 10) && ((p) <= 13)) || (((p) >= 50) && ((p) <= 53)) ? (&PCMSK0) : \
                                ( (((p) >= 62) && ((p) <= 69)) ? (&PCMSK2) : \
                                ((uint8_t *)0) ) )

#define digitalPinToPCMSKbit(p) ( (((p) >= 10) && ((p) <= 13)) ? ((p) - 6) : \
                                ( ((p) == 50) ? 3 : \
                                ( ((p) == 51) ? 2 : \
                                ( ((p) == 52) ? 1 : \
                                ( ((p) == 53) ? 0 : \
                                ( (((p) >= 62) && ((p) <= 69)) ? ((p) - 62) : \
                                0 ) ) ) ) ) )

#define digitalPinToInterrupt(p) ((p) == 2 ? 0 : ((p) == 3 ? 1 : ((p) >= 18 && (p) <= 21 ? 23 - (p) : NOT_AN_INTERRUPT)))

#ifdef ARDUINO_MAIN

const uint16_t PROGMEM port_to_mode_PGM[] = {
        NOT_A_PORT,
        (uint16_t) &DDRA,
        (uint16_t) &DDRB,
        (uint16_t) &DDRC,
        (uint16_t) &DDRD,
        (uint16_t) &DDRE,
        (uint16_t) &DDRF,
        (uint16_t) &DDRG,
        (uint16_t) &DDRH,
        NOT_A_PORT,
        (uint16_t) &DDRJ,
        (uint16_t) &DDRK,
        (uint16_t) &DDRL,
};

const uint16_t PROGMEM port_to_output_PGM[] = {
        NOT_A_PORT,
        (uint16_t) &PORTA,
        (uint16_t) &PORTB,
        (uint16_t) &PORTC,
        (uint16_t) &PORTD,
        (uint16_t) &PORTE,
        (uint16_t) &PORTF,
        (uint16_t) &PORTG,
        (uint16_t) &PORTH,
        NOT_A_PORT,
        (uint16_t) &PORTJ,
        (uint16_t) &PORTK,
        (uint16_t) &PORTL,
};

const uint16_t PROGMEM port_to_input_PGM[] = {
        NOT_A_PIN,
        (uint16_t) &PINA,
        (uint16_t) &PINB,
        (uint16_t) &PINC,
        (uint16_t) &PIND,
        (uint16_t) &PINE,
        (uint16_t) &PINF,
        (uint16_t) &PING,
        (uint16_t) &PINH,
        NOT_A_PIN,
        (uint16_t) &PINJ,
        (uint16_t) &PINK,
        (uint16_t) &PINL,
};

const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
        // PORTLIST
        // ----------
        PE      , // PE 0 ** 0 ** USART0_RX
        PE      , // PE 1 ** 1 ** USART0_TX
        PE      , // PE 4 ** 2 ** PWM2
        PE      , // PE 5 ** 3 ** PWM3
        PG      , // PG 5 ** 4 ** PWM4
        PE      , // PE 3 ** 5 ** PWM5
        PH      , // PH 3 ** 6 ** PWM6
        PH      , // PH 4 ** 7 ** PWM7
        PH      , // PH 5 ** 8 ** PWM8
        PH      , // PH 6 ** 9 ** PWM9
        PB      , // PB 4 ** 10 ** PWM10
        PB      , // PB 5 ** 11 ** PWM11
        PB      , // PB 6 ** 12 ** PWM12
        PB      , // PB 7 ** 13 ** PWM13
        PJ      , // PJ 1 ** 14 ** USART3_TX
        PJ      , // PJ 0 ** 15 ** USART3_RX
        PH      , // PH 1 ** 16 ** USART2_TX
        PH      , // PH 0 ** 17 ** USART2_RX
        PD      , // PD 3 ** 18 ** USART1_TX
        PD      , // PD 2 ** 19 ** USART1_RX
        PD      , // PD 1 ** 20 ** I2C_SDA
        PD      , // PD 0 ** 21 ** I2C_SCL
        PA      , // PA 0 ** 22 ** D22
        PA      , // PA 1 ** 23 ** D23
        PA      , // PA 2 ** 24 ** D24
        PA      , // PA 3 ** 25 ** D25
        PA      , // PA 4 ** 26 ** D26
        PA      , // PA 5 ** 27 ** D27
        PA      , // PA 6 ** 28 ** D28
        PA      , // PA 7 ** 29 ** D29
        PC      , // PC 7 ** 30 ** D30
        PC      , // PC 6 ** 31 ** D31
        PC      , // PC 5 ** 32 ** D32
        PC      , // PC 4 ** 33 ** D33
        PC      , // PC 3 ** 34 ** D34
        PC      , // PC 2 ** 35 ** D35
        PC      , // PC 1 ** 36 ** D36
        PC      , // PC 0 ** 37 ** D37
        PD      , // PD 7 ** 38 ** D38
        PG      , // PG 2 ** 39 ** D39
        PG      , // PG 1 ** 40 ** D40
        PG      , // PG 0 ** 41 ** D41
        PL      , // PL 7 ** 42 ** D42
        PL      , // PL 6 ** 43 ** D43
        PL      , // PL 5 ** 44 ** D44
        PL      , // PL 4 ** 45 ** D45
        PL      , // PL 3 ** 46 ** D46
        PL      , // PL 2 ** 47 ** D47
        PL      , // PL 1 ** 48 ** D48
        PL      , // PL 0 ** 49 ** D49
        PB      , // PB 3 ** 50 ** SPI_MISO
        PB      , // PB 2 ** 51 ** SPI_MOSI
        PB      , // PB 1 ** 52 ** SPI_SCK
        PB      , // PB 0 ** 53 ** SPI_SS
        PF      , // PF 0 ** 54 ** A0
        PF      , // PF 1 ** 55 ** A1
        PF      , // PF 2 ** 56 ** A2
        PF      , // PF 3 ** 57 ** A3
        PF      , // PF 4 ** 58 ** A4
        PF      , // PF 5 ** 59 ** A5
        PF      , // PF 6 ** 60 ** A6
        PF      , // PF 7 ** 61 ** A7
        PK      , // PK 0 ** 62 ** A8
        PK      , // PK 1 ** 63 ** A9
        PK      , // PK 2 ** 64 ** A10
        PK      , // PK 3 ** 65 ** A11
        PK      , // PK 4 ** 66 ** A12
        PK      , // PK 5 ** 67 ** A13
        PK      , // PK 6 ** 68 ** A14
        PK      , // PK 7 ** 69 ** A15
};

const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
        // PIN IN PORT
        // ----------
        _BV( 0 )        , // PE 0 ** 0 ** USART0_RX
        _BV( 1 )        , // PE 1 ** 1 ** USART0_TX
        _BV( 4 )        , // PE 4 ** 2 ** PWM2
        _BV( 5 )        , // PE 5 ** 3 ** PWM3
        _BV( 5 )        , // PG 5 ** 4 ** PWM4
        _BV( 3 )        , // PE 3 ** 5 ** PWM5
        _BV( 3 )        , // PH 3 ** 6 ** PWM6
        _BV( 4 )        , // PH 4 ** 7 ** PWM7
        _BV( 5 )        , // PH 5 ** 8 ** PWM8
        _BV( 6 )        , // PH 6 ** 9 ** PWM9
        _BV( 4 )        , // PB 4 ** 10 ** PWM10
        _BV( 5 )        , // PB 5 ** 11 ** PWM11
        _BV( 6 )        , // PB 6 ** 12 ** PWM12
        _BV( 7 )        , // PB 7 ** 13 ** PWM13
        _BV( 1 )        , // PJ 1 ** 14 ** USART3_TX
        _BV( 0 )        , // PJ 0 ** 15 ** USART3_RX
        _BV( 1 )        , // PH 1 ** 16 ** USART2_TX
        _BV( 0 )        , // PH 0 ** 17 ** USART2_RX
        _BV( 3 )        , // PD 3 ** 18 ** USART1_TX
        _BV( 2 )        , // PD 2 ** 19 ** USART1_RX
        _BV( 1 )        , // PD 1 ** 20 ** I2C_SDA
        _BV( 0 )        , // PD 0 ** 21 ** I2C_SCL
        _BV( 0 )        , // PA 0 ** 22 ** D22
        _BV( 1 )        , // PA 1 ** 23 ** D23
        _BV( 2 )        , // PA 2 ** 24 ** D24
        _BV( 3 )        , // PA 3 ** 25 ** D25
        _BV( 4 )        , // PA 4 ** 26 ** D26
        _BV( 5 )        , // PA 5 ** 27 ** D27
        _BV( 6 )        , // PA 6 ** 28 ** D28
        _BV( 7 )        , // PA 7 ** 29 ** D29
        _BV( 7 )        , // PC 7 ** 30 ** D30
        _BV( 6 )        , // PC 6 ** 31 ** D31
        _BV( 5 )        , // PC 5 ** 32 ** D32
        _BV( 4 )        , // PC 4 ** 33 ** D33
        _BV( 3 )        , // PC 3 ** 34 ** D34
        _BV( 2 )        , // PC 2 ** 35 ** D35
        _BV( 1 )        , // PC 1 ** 36 ** D36
        _BV( 0 )        , // PC 0 ** 37 ** D37
        _BV( 7 )        , // PD 7 ** 38 ** D38
        _BV( 2 )        , // PG 2 ** 39 ** D39
        _BV( 1 )        , // PG 1 ** 40 ** D40
        _BV( 0 )        , // PG 0 ** 41 ** D41
        _BV( 7 )        , // PL 7 ** 42 ** D42
        _BV( 6 )        , // PL 6 ** 43 ** D43
        _BV( 5 )        , // PL 5 ** 44 ** D44
        _BV( 4 )        , // PL 4 ** 45 ** D45
        _BV( 3 )        , // PL 3 ** 46 ** D46
        _BV( 2 )        , // PL 2 ** 47 ** D47
        _BV( 1 )        , // PL 1 ** 48 ** D48
        _BV( 0 )        , // PL 0 ** 49 ** D49
        _BV( 3 )        , // PB 3 ** 50 ** SPI_MISO
        _BV( 2 )        , // PB 2 ** 51 ** SPI_MOSI
        _BV( 1 )        , // PB 1 ** 52 ** SPI_SCK
        _BV( 0 )        , // PB 0 ** 53 ** SPI_SS
        _BV( 0 )        , // PF 0 ** 54 ** A0
        _BV( 1 )        , // PF 1 ** 55 ** A1
        _BV( 2 )        , // PF 2 ** 56 ** A2
        _BV( 3 )        , // PF 3 ** 57 ** A3
        _BV( 4 )        , // PF 4 ** 58 ** A4
        _BV( 5 )        , // PF 5 ** 59 ** A5
        _BV( 6 )        , // PF 6 ** 60 ** A6
        _BV( 7 )        , // PF 7 ** 61 ** A7
        _BV( 0 )        , // PK 0 ** 62 ** A8
        _BV( 1 )        , // PK 1 ** 63 ** A9
        _BV( 2 )        , // PK 2 ** 64 ** A10
        _BV( 3 )        , // PK 3 ** 65 ** A11
        _BV( 4 )        , // PK 4 ** 66 ** A12
        _BV( 5 )        , // PK 5 ** 67 ** A13
        _BV( 6 )        , // PK 6 ** 68 ** A14
        _BV( 7 )        , // PK 7 ** 69 ** A15
};

const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
        // TIMERS
        // ----------
        NOT_ON_TIMER    , // PE 0 ** 0 ** USART0_RX
        NOT_ON_TIMER    , // PE 1 ** 1 ** USART0_TX
        TIMER3B , // PE 4 ** 2 ** PWM2
        TIMER3C , // PE 5 ** 3 ** PWM3
        TIMER0B , // PG 5 ** 4 ** PWM4
        TIMER3A , // PE 3 ** 5 ** PWM5
        TIMER4A , // PH 3 ** 6 ** PWM6
        TIMER4B , // PH 4 ** 7 ** PWM7
        TIMER4C , // PH 5 ** 8 ** PWM8
        TIMER2B , // PH 6 ** 9 ** PWM9
        TIMER2A , // PB 4 ** 10 ** PWM10
        TIMER1A , // PB 5 ** 11 ** PWM11
        TIMER1B , // PB 6 ** 12 ** PWM12
        TIMER0A , // PB 7 ** 13 ** PWM13
        NOT_ON_TIMER    , // PJ 1 ** 14 ** USART3_TX
        NOT_ON_TIMER    , // PJ 0 ** 15 ** USART3_RX
        NOT_ON_TIMER    , // PH 1 ** 16 ** USART2_TX
        NOT_ON_TIMER    , // PH 0 ** 17 ** USART2_RX
        NOT_ON_TIMER    , // PD 3 ** 18 ** USART1_TX
        NOT_ON_TIMER    , // PD 2 ** 19 ** USART1_RX
        NOT_ON_TIMER    , // PD 1 ** 20 ** I2C_SDA
        NOT_ON_TIMER    , // PD 0 ** 21 ** I2C_SCL
        NOT_ON_TIMER    , // PA 0 ** 22 ** D22
        NOT_ON_TIMER    , // PA 1 ** 23 ** D23
        NOT_ON_TIMER    , // PA 2 ** 24 ** D24
        NOT_ON_TIMER    , // PA 3 ** 25 ** D25
        NOT_ON_TIMER    , // PA 4 ** 26 ** D26
        NOT_ON_TIMER    , // PA 5 ** 27 ** D27
        NOT_ON_TIMER    , // PA 6 ** 28 ** D28
        NOT_ON_TIMER    , // PA 7 ** 29 ** D29
        NOT_ON_TIMER    , // PC 7 ** 30 ** D30
        NOT_ON_TIMER    , // PC 6 ** 31 ** D31
        NOT_ON_TIMER    , // PC 5 ** 32 ** D32
        NOT_ON_TIMER    , // PC 4 ** 33 ** D33
        NOT_ON_TIMER    , // PC 3 ** 34 ** D34
        NOT_ON_TIMER    , // PC 2 ** 35 ** D35
        NOT_ON_TIMER    , // PC 1 ** 36 ** D36
        NOT_ON_TIMER    , // PC 0 ** 37 ** D37
        NOT_ON_TIMER    , // PD 7 ** 38 ** D38
        NOT_ON_TIMER    , // PG 2 ** 39 ** D39
        NOT_ON_TIMER    , // PG 1 ** 40 ** D40
        NOT_ON_TIMER    , // PG 0 ** 41 ** D41
        NOT_ON_TIMER    , // PL 7 ** 42 ** D42
        NOT_ON_TIMER    , // PL 6 ** 43 ** D43
        TIMER5C , // PL 5 ** 44 ** D44
        TIMER5B , // PL 4 ** 45 ** D45
        TIMER5A , // PL 3 ** 46 ** D46
        NOT_ON_TIMER    , // PL 2 ** 47 ** D47
        NOT_ON_TIMER    , // PL 1 ** 48 ** D48
        NOT_ON_TIMER    , // PL 0 ** 49 ** D49
        NOT_ON_TIMER    , // PB 3 ** 50 ** SPI_MISO
        NOT_ON_TIMER    , // PB 2 ** 51 ** SPI_MOSI
        NOT_ON_TIMER    , // PB 1 ** 52 ** SPI_SCK
        NOT_ON_TIMER    , // PB 0 ** 53 ** SPI_SS
        NOT_ON_TIMER    , // PF 0 ** 54 ** A0
        NOT_ON_TIMER    , // PF 1 ** 55 ** A1
        NOT_ON_TIMER    , // PF 2 ** 56 ** A2
        NOT_ON_TIMER    , // PF 3 ** 57 ** A3
        NOT_ON_TIMER    , // PF 4 ** 58 ** A4
        NOT_ON_TIMER    , // PF 5 ** 59 ** A5
        NOT_ON_TIMER    , // PF 6 ** 60 ** A6
        NOT_ON_TIMER    , // PF 7 ** 61 ** A7
        NOT_ON_TIMER    , // PK 0 ** 62 ** A8
        NOT_ON_TIMER    , // PK 1 ** 63 ** A9
        NOT_ON_TIMER    , // PK 2 ** 64 ** A10
        NOT_ON_TIMER    , // PK 3 ** 65 ** A11
        NOT_ON_TIMER    , // PK 4 ** 66 ** A12
        NOT_ON_TIMER    , // PK 5 ** 67 ** A13
        NOT_ON_TIMER    , // PK 6 ** 68 ** A14
        NOT_ON_TIMER    , // PK 7 ** 69 ** A15
};


Ес-но всё это несет накладные расходы. И вычитывание номера порта, пина и т.д. каждый раз при обращении к нему по виртуальному номеру. В отличии от #define'ов, предложенных выше. Но если вы хотите динамически в одном и том же назначать разную привязку порт-функционал, то от подобных расходов не уйти конечно.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y