реклама на сайте
подробности

 
 
> C++ templates и mcu peripherals
_Артём_
сообщение Mar 23 2012, 00:03
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Доброе утро.
Такой простой вопрос: сейчас многие современные контроллеры оснащаются несколькими однотипными блоками периферии. Что толкает к повторному использованию кода и templates в частности.
Как правило структура блока однотипна (имеет одинаково расположенные в памяти регистры) и каждый блок занимает в памяти некоторую непрерывную область начинающиюся с базового адреса.
Ну так вот вопрос: как правильней передать шаблону этот самый базовый адрес?
Код
template <int BASE_ADDRESS> class TIOBlock {
.....
}

И потом приводить этот адрес к тому что надо?
Или использовать enum или ещё что?
Как делать правильней?

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MALLOY2
сообщение Mar 23 2012, 16:44
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



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

Цитата
Например как AT91C_ID_US0... както сами определяли?


Вот так sm.gif
Код
// *****************************************************************************
//               PERIPHERAL ID DEFINITIONS FOR AT91SAM9XE512
// *****************************************************************************
#define AT91C_ID_FIQ    ( 0) // Advanced Interrupt Controller (FIQ)
#define AT91C_ID_SYS    ( 1) // System Controller
#define AT91C_ID_PIOA   ( 2) // Parallel IO Controller A
#define AT91C_ID_PIOB   ( 3) // Parallel IO Controller B
#define AT91C_ID_PIOC   ( 4) // Parallel IO Controller C
#define AT91C_ID_ADC    ( 5) // ADC
#define AT91C_ID_US0    ( 6) // USART 0
#define AT91C_ID_US1    ( 7) // USART 1
#define AT91C_ID_US2    ( 8) // USART 2
#define AT91C_ID_MCI    ( 9) // Multimedia Card Interface 0
#define AT91C_ID_UDP    (10) // USB Device Port
#define AT91C_ID_TWI0   (11) // Two-Wire Interface 0
#define AT91C_ID_SPI0   (12) // Serial Peripheral Interface 0
#define AT91C_ID_SPI1   (13) // Serial Peripheral Interface 1
#define AT91C_ID_SSC0   (14) // Serial Synchronous Controller 0
#define AT91C_ID_TC0    (17) // Timer Counter 0
#define AT91C_ID_TC1    (18) // Timer Counter 1
#define AT91C_ID_TC2    (19) // Timer Counter 2
#define AT91C_ID_UHP    (20) // USB Host Port
#define AT91C_ID_EMAC   (21) // Ethernet Mac
#define AT91C_ID_ISI    (22) // Image Sensor Interface
#define AT91C_ID_US3    (23) // USART 3
#define AT91C_ID_US4    (24) // USART 4
#define AT91C_ID_TWI1   (25) // Two-Wire Interface 1
#define AT91C_ID_TC3    (26) // Timer Counter 3
#define AT91C_ID_TC4    (27) // Timer Counter 4
#define AT91C_ID_TC5    (28) // Timer Counter 5
#define AT91C_ID_IRQ0   (29) // Advanced Interrupt Controller (IRQ0)
#define AT91C_ID_IRQ1   (30) // Advanced Interrupt Controller (IRQ1)
#define AT91C_ID_IRQ2   (31) // Advanced Interrupt Controller (IRQ2)
#define AT91C_ALL_INT   (0xFFFE7FFF) // ALL VALID INTERRUPTS
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 04:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016