|
Двухъядерные микроконтроллеры NXP LPC43xx, Есть ли изюм в переходе??? |
|
|
|
Jul 7 2013, 04:03
|
Местный
  
Группа: Свой
Сообщений: 294
Регистрация: 28-02-05
Из: Екатеринбург
Пользователь №: 2 925

|
Цитата(Metallist64 @ Jul 6 2013, 01:10)  1. Отсутствие внутренней флэш памяти. Я так понимаю ставят внешнюю шлэш... Наверное медленее исполняется программа...??? LPC4357FET256 имеет 1Mb встроенной флеш-памяти. И потом, можно же переписать программу в ОЗУ при загрузке.
|
|
|
|
|
Jul 7 2013, 09:59
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(Metallist64 @ Jul 7 2013, 12:29)  Но все таки интересно, как разделяется работа программы между ядрами. Может кто-нибудь на пальцах сможет объяснить? Всю правду и замыслы NXP вам никто не расскажет. Но я вижу такой вариант использования: У NXP традиционно очень упрощенная периферия последовательных интерфейсов и сделать на них нишевые интерфейсы как LIN, HART, 1-Wire и т.д. получается довольно криво в плане использовния ресурсов процессора. Вот они и решили убить всех зайцев дополнительным ядром. Но на обоих, как я понял из их мануала, ставятся RTOS. Поскольку реально необходимость в сопроцессоре появляется когда задач становиться действительно много - несколько десятков. А с таким количеством задач можно работать только используя RTOS. Далее они накидали схематично протокол на основе разделяемой памяти и прерываний и там уже разработчику реализовывать его надо самому, а может у них и API где-то в ROM-е закопано. Этот момент мутный. На уровне же приложения распределение функциональности на локальную и на сопроцессоре делается исключительно в ручную методом проб и ошибок. Некотороые оси предлагают прозрачный интерфейс межзадачного обмена. И тогда перенос какой либо локальной задачи на сопроцессор не вызывает необходимости править исходники других задач. Но NXP такой оси не предлагает. Это с их стороны ошибка думаю, уменьшают юзабельность своего решения.
|
|
|
|
|
Jul 7 2013, 20:38
|
Частый гость
 
Группа: Участник
Сообщений: 103
Регистрация: 29-01-08
Пользователь №: 34 558

|
Цитата Как программист сделает, так и будет. В общем и интересует, кто как делает. Можно ли допустим обработку прерываний повесить на одно ядро, а вычисления - на второе? Посмотрел хидер для LPC43xx.h от KEIL`a нашел в частности следующую строки: CODE M0_TIMER0_IRQn = 12, /*!< 12 TIMER0 */ M0_GINT1_IRQn = 13, /*!< 13 GINT1 */ M0_TIMER3_IRQn = 15, /*!< 15 TIMER3 */ M0_MCPWM_IRQn = 16, /*!< 16 MCPWM */ M0_ADC0_IRQn = 17, /*!< 17 ADC0 */
По этому хидеру вроде видно, что можно "повесить" обработчик прерывания для ядро Cortex-M0 Причем для есть и такие строки: CODE TIMER0_IRQn = 12, /*!< 12 TIMER0 */ TIMER1_IRQn = 13, /*!< 13 TIMER1 */ TIMER2_IRQn = 14, /*!< 14 TIMER2 */ TIMER3_IRQn = 15, /*!< 15 TIMER3 */
Т.е. похоже, что они предназначены для основного ядра Cortex-M4. Похоже, что можно играться прерываниями независимо от ядра? Неясно только, как будут обрабатываться прерывания обоими ядрами от одного источника, например от UART0. Может быть, кто-нибудь имел так сказать, практический опыт?
|
|
|
|
|
Jul 7 2013, 21:20
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(Metallist64 @ Jul 7 2013, 23:38)  Т.е. похоже, что они предназначены для основного ядра Cortex-M4. Мануалы принципиально не читаете? У каждого ядра свой собственный контроллер прерываний. Что подключено к каждому лучше смотреть по мануалу, а не по кейловским хидерам. Ну а предсказать кто из двоих при одновременном старте обслуживания одного и того же прерывания первым доберется до определенных регистров невозможно. Т.е. конфликты неизбежны при таком подходе. Плохо что в чипе нет аппаратной защиты от такого доступа. Т.е. можно таких уникальных багов наворотить, что и JTAG не поможет.
|
|
|
|
|
Jul 8 2013, 05:56
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(Metallist64 @ Jul 5 2013, 22:10)  Здравствуйте уважаемые специалисты! Заинтересовали 2х ядренные микроконтроллеры от NXP. Весьма странная железка. Цитата 7.4 Interprocessor communication The ARM Cortex-M4 and ARM Cortex-M0 inte rprocessor communication is based on using shared SRAM as mailbox and one processor raising an interrupt on the other processor's NVIC, for example after it has delivered a new message in the mailbox. The receiving processor can reply by raising an interrupt on the sending processor's NVIC to acknowledge the message Мне лично не совсем понятен смысл. Вроде как уже не то время, чтобы задержки по тактам процессора считать. С остальным справляется ось. Но с осью удобнее когда два процессора одинаковые. Можно конечно чтобы один процессор занимался к примеру UARTами а второй TCP, но тогда придется городить прослойку чтобы они общались друг с другом. Согласен что целое поле не паханное для уникальнейших граблей, каких еще свет не видывал.
|
|
|
|
|
Jul 8 2013, 06:56
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Цитата(Metallist64 @ Jul 5 2013, 22:10)  1. Отсутствие внутренней флэш памяти. Я так понимаю ставят внешнюю шлэш... Наверное медленее исполняется программа...??? Ставят внешнюю или используют контроллер с внутренней. С внешней особенно сериальной флешкой жудко медленно! Цитата(Metallist64 @ Jul 5 2013, 22:10)  2. Наличие каких-то драйверов для переферии уже в самом МК. Это вообще непонятно... Во флеш уже залиты какие-то функции осталось их только вызывать зная их адрес. Цитата(Metallist64 @ Jul 5 2013, 22:10)  Ну и последнее, как на практике, для новичка выглядит программирование под 2 ядра??? Пишем код для одного адра, отлаживаем; пишем код для второго, отлаживаем. Цитата(Metallist64 @ Jul 5 2013, 22:10)  Можно ли запустить один таймер на сопроцессоре для отрисовки скажем небольшого графического дисплея, а основное ядро допустим не будет отвлекаться на эти прерывания??? Можно.
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Jul 9 2013, 07:54
|
Частый гость
 
Группа: Участник
Сообщений: 103
Регистрация: 29-01-08
Пользователь №: 34 558

|
Цитата(skripach @ Jul 8 2013, 09:56)  Пишем код для одного адра, отлаживаем; пишем код для второго, отлаживаем. Можно. Насколько я понял вы уже общались с данными микросхемами. Не было ли затруднений при обращении в один и тот же массив/структуру обоим ядрам? Может как-то надо разделять эти операции по времени? Компилятор(Keil, IAR) вообще корректно работает с данными МК?
|
|
|
|
|
Jul 10 2013, 07:30
|
■ ■ ■ ■
    
Группа: Свой
Сообщений: 1 100
Регистрация: 9-08-06
Пользователь №: 19 443

|
Цитата(Metallist64 @ Jul 9 2013, 10:54)  Насколько я понял вы уже общались с данными микросхемами. Не было ли затруднений при обращении в один и тот же массив/структуру обоим ядрам? Может как-то надо разделять эти операции по времени? Компилятор(Keil, IAR) вообще корректно работает с данными МК? -Не понимаю какие затруднения могут быть? -Да корректно. Ну и наверно компилятор работает не с МК, а с ядром (M4/M0).
--------------------
Делай что должен и будь что будет.
|
|
|
|
|
Jul 15 2013, 14:47
|
Группа: Участник
Сообщений: 12
Регистрация: 1-07-05
Пользователь №: 6 437

|
Неужели трехядерник:
LPC4370: 32-bit ARM Cortex-M4 + 2 x M0 MCU; 282 kB SRAM; Ethernet; two HS USBs; 80 Msps 12-bit ADC; configurable peripherals
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|