|
RTOS для ARM7, какую выбрать? Отзывы и мнения., Рассматривается вариант RTX от Keil или есть что-то интересней/лучше? |
|
|
|
Dec 21 2010, 04:43
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 4-03-07
Пользователь №: 25 855

|
Доброо времени суток. Вопрос отчасти банальный, но все же...
Запускается проект на ARM7 AT91SAM7X___. Задача - специализированное устройство для передачи данных, прием данных по нескольким стыкам UART, USB, CAN, обработка и передача далее по линии связи.
Рассматривается вопрос применения RTX kernel от Keil'а. Кто имеет опыт работы с этой илидругими RTOS? какие впечатления? Подводные камни? Время на освоение?
Возможно есть системы более подходящие для подобной задачи? Предполагаю, что сколько людей столько и мнений и все же...
Ранее подобные проекты делались полносью самостоятельно. Сейчас сроки поджимают, да и интересно даст ли применение RTOS упрощение реализации?
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 27)
|
Dec 22 2010, 07:42
|
Участник

Группа: Участник
Сообщений: 59
Регистрация: 3-01-07
Из: Germany
Пользователь №: 24 071

|
Я тоже TNKernel предпочитаю из за свободных исходников, и нет неободимости с однм только Keil (как в случае RTX) дружить. Если память в кристале дорога то scmRTOS очень компактна.
|
|
|
|
|
Dec 22 2010, 10:50
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 22-12-10
Из: Россия, Ростовская обл.
Пользователь №: 61 800

|
Цитата(Shein @ Dec 21 2010, 10:43)  Запускается проект на ARM7 AT91SAM7X___. Задача - специализированное устройство для передачи данных, прием данных по нескольким стыкам UART, USB, CAN, обработка и передача далее по линии связи.
Рассматривается вопрос применения RTX kernel от Keil'а.
Кто имеет опыт работы с этой илидругими RTOS? какие впечатления? Подводные камни? Время на освоение? Возможно есть системы более подходящие для подобной задачи? Просто посмотрите в сторону микроядра L4 - http://l4hq.org/arch/arm/На его основе можно построить всё что угодно, например, операционную систему - http://www.l4os.ru
|
|
|
|
|
Dec 23 2010, 13:22
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 4-03-07
Пользователь №: 25 855

|
Цитата(Nixon @ Dec 21 2010, 10:57)  Используйте RTX. Никаких проблем кроме необходимости понимания основ RTOS и грамотного проектирования нет. Хорошо документирована, имеет плагин отладки для Keil и примеры применения. Время на освоение при наличии головы на плечах почти 0. Собственно мне тоже показалось, при первом знакомстве, что сложного там ничего нет. Хотя это же и смутило, как-то не верится что все так просто и функционально. Вот и подумалось, вдруг там не все так красио как в документации. Цитата(Nixon @ Dec 21 2010, 10:57)  Упрощения реализации не будет (а что же вы хотели - в систему вводятся новые сущности RTOS), но ускорение разработки я вам гарантирую. Кроме того, применение RTOS упрощает масштабирование системы и совместную разработку. Собственно я не так выразился. Имелось ввиду именно ускорение разработки.
|
|
|
|
|
Dec 24 2010, 05:44
|
Участник

Группа: Участник
Сообщений: 45
Регистрация: 4-03-07
Пользователь №: 25 855

|
Цитата(Axel @ Dec 22 2010, 11:22)  Рекомендую - на основе собственного опыта - TNKernel. Бесплатная, прозрачная, с открытыми исходниками. Имеющиеся примеры помогают быстро освоить. Подводные камни - только традиционные, типа инверсии приоритетов. Я доволен... Почитал, выглядит не плохо. Такой, возможно глупый, вопрос: возможна ли отладка в TNKernel при использовании Keil+ULINK(JTAG)? RTX, насколько я понял, поддерживается отладчиком Keil достаточно хорошо, наглядно отображая состояние системы. Цитата(sergeeff @ Dec 24 2010, 02:32)  Думается, что если вы в первый раз пользуетесь RTOS, то ускорения разработки вы не получите, а получите ее замедление. Пока не поймете, что к чему и всю специфику RTOS с ее мультизадачностью. Речь может идти о более эффективном решении задачи, хотя это сложно померить в "попугаях". Пусть так. Надо же когда-то начинать  Да и задача, по моему разумению, очень уж красиво ложится на многопоточную реализацию. Самому "изобретать велосипед" тоже вряд ли быстро получится.
|
|
|
|
|
Jan 9 2011, 06:43
|
Группа: Новичок
Сообщений: 3
Регистрация: 25-08-10
Пользователь №: 59 109

|
Прошу прощения что влезаю, но тема кажется подходящая. У меня такой вопрос, можно ли под какую-нибудь RTOS написать приложение изначально в проекте не присутствующее, но которое можно будет подгрузить, не переписывая при этом файлы системы. То есть аналог .exe в Windows.
|
|
|
|
|
Jan 9 2011, 07:11
|

embarrassed systems engineer
    
Группа: Свой
Сообщений: 1 083
Регистрация: 24-10-05
Из: Осокорки
Пользователь №: 10 038

|
Цитата(Сулейман @ Jan 9 2011, 11:43)  Прошу прощения что влезаю, но тема кажется подходящая. У меня такой вопрос, можно ли под какую-нибудь RTOS написать приложение изначально в проекте не присутствующее, но которое можно будет подгрузить, не переписывая при этом файлы системы. То есть аналог .exe в Windows. Конечно - решаете вопрос динамического связывания (линковки) и все получится. То есть - нужно придумать как из загруженного модуля вызывать сервисы системы, код которых расположен в незагружаемой части. Тут вариантов много - использовать сервисное прерывание (просто, перемещаемо, но быстродействие хуже) или вызывать функции по определенным адресам (переходники в таблице по заранее известному адресу, чтобы не зависеть от сборки/версии сервисов), патчить (настраивать) загруженный модуль непосредственно на адреса вызова нужных функций - сложнее, но вообще скорость не упадет.
|
|
|
|
|
Jan 9 2011, 14:47
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(AlexandrY @ Jan 9 2011, 19:47)  Короче нет маленьких и понятных RTOS с такой фичей. Нужна виртуализация памяти, а это уже только в толстых осях. http://prex.sourceforge.net/Цитата Prex has the following features:
* Task & Thread Control: preemptive priority scheduling with 256 priority levels * Memory Management: memory protection, virtual address mapping, shared memory, MMU or MMU-less configuration * IPC: object name space, synchronous message passing between threads * Exception: fault trapping, framework for POSIX signal emulation * Synchronization: semaphores, condition variables, and mutexes with priority inheritance * Timers: sleep timers, one-shot or periodic timers * Interrupt: nested interrupt service routines, and prioritized interrupt service threads * Device I/O: minimum synchronous I/O interface, DPC (Deferred Procedure Call) * Security: task capability, pathname-based access control, I/O access permission. * Real-time: low interrupt latency, high resolution timers and scheduling priority control * Power Management: power policy, idle thread, DVS (Dynamic Voltage Scaling) * Debugging Facility: event logging, kernel dump, GDB remote debug * File Systems: multi-threaded, VFS framework, buffer cache, ramfs, fatfs, arfs, etc. * POSIX Emulation: pid, fork, exec, file I/O, signal, pipe, tty, pthread, etc. * Libc: C library fully optimized to generate a small executable file * CmdBox: a small binary that includes tiny versions of many UNIX utilities. * Networking: (plan) TCP/IP stack, BSD socket interface
Prex minimum hardware requirements are as follows:
* Processor: 32-bit Processor (x86, ARM, PowerPC) * Memory: 256KB of RAM (Kernel < 25k bytes) * Timer: programmable interval timer Не такая уж и большая
|
|
|
|
|
Jan 9 2011, 20:03
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414

|
Цитата(AlexandrY @ Jan 9 2011, 19:47)  К чему воздух молотить?  Короче нет маленьких и понятных RTOS с такой фичей. Нужна виртуализация памяти, а это уже только в толстых осях. Когда-то были, но не о том речь. Виртуализация памяти для решения этой задачи не требуется совершенно, а вот динамическое распределение свободного пространства ОЗУ, умение грузить в него код из внешнего источника, настраивать на адрес загрузки -- нужно. Что из этого реализовано в упомянутых здесь системах, понятия не имею -- дела не имел, однако подозреваю, что либо вообще ничего, либо очень мало. В общем, задача вполне решаемая, но не слишком быстро (и, естественно, требует хорошего понимания базовой оси, формата загружаемых файлов и т.п.).
|
|
|
|
|
May 16 2011, 08:47
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 1-02-11
Пользователь №: 62 608

|
Цитата(Сулейман @ Jan 9 2011, 10:43)  Прошу прощения что влезаю, но тема кажется подходящая. У меня такой вопрос, можно ли под какую-нибудь RTOS написать приложение изначально в проекте не присутствующее, но которое можно будет подгрузить, не переписывая при этом файлы системы. То есть аналог .exe в Windows. VxWorks
|
|
|
|
|
Jun 14 2011, 09:41
|
Местный
  
Группа: Свой
Сообщений: 353
Регистрация: 11-09-06
Из: Минск
Пользователь №: 20 282

|
Цитата(Аматер @ Jun 14 2011, 11:16)  А я на свою голову на RTX заложился, теперь думаю может все-таки перескочить на что нибудь еще. Проблемы начались с Ethernet, а исходников нет. Это конечно не к операционке, а библиотеке относится, но тем не менее. А какой у вас поц.? У меня был LM3S8972, там вместе с китом были дрова для Ethrnet-a и пример для RL-TCPnet. Нормально запустился и работал. Я на его основе сделал вполне неплохое приложение. Если надо - выложу.
|
|
|
|
|
Jun 14 2011, 12:34
|

Частый гость
 
Группа: Участник
Сообщений: 95
Регистрация: 3-01-10
Из: Рождественно
Пользователь №: 54 616

|
Цитата(evg123 @ Jun 14 2011, 13:41)  А какой у вас поц.? У меня был LM3S8972, там вместе с китом были дрова для Ethrnet-a и пример для RL-TCPnet. Нормально запустился и работал. Я на его основе сделал вполне неплохое приложение. Если надо - выложу. У меня LPC1766 использую RL-TCPnet. Соединение работает, но закрывается через время тайм аута. У вас такого не было? У меня код такой - CODE U16 tcp_callback (U8 soc, U8 evt, U8 *ptr, U16 par) { int i=0;
unsigned short ln; if (soc != socket_tcp) { return (0); }
switch (evt) { case TCP_EVT_DATA: /* TCP data frame has arrived, data is located at *par1, */ /* data length is par2. Allocate buffer to send reply. */ pEther=EtherBuf; //memcpy(EtherBufIn,(char*)ptr,par); for(i=0;i<par;i++) { EtherBufIn[EthBufOffset]=(char)ptr[i]; if(EtherBufIn[EthBufOffset]==0xd || EtherBufIn[EthBufOffset]==0) { EtherBufIn[EthBufOffset]=0; ExecuteCmd(EtherBufIn,0); EthBufOffset = 0; } else { EthBufOffset++; if(EthBufOffset>=sizeof(EtherBufIn)) EthBufOffset=0; } } ln = pEther-EtherBuf; SendEther = tcp_get_buf(ln); memcpy(SendEther,EtherBuf,ln); tcp_send(socket_tcp, SendEther, ln); Cmd = 0; break; case TCP_EVT_ABORT: /* Connection was aborted */ break; case TCP_EVT_CONREQ: /* Remote peer requested connect, accept it */ return (1); case TCP_EVT_CONNECT: /* The TCP socket is connected */ return (1); } return (0); }
__task void Ether() { os_itv_set(RL_1MS*20); init_TcpNet();
// Initialize TCP Socket and start listening socket_tcp = tcp_get_socket (TCP_TYPE_SERVER, 0, 30, tcp_callback); // | TCP_TYPE_KEEP_ALIVE if (socket_tcp != 0) tcp_listen(socket_tcp, PORT_NUM);
while (1) { os_itv_wait(); // wait timer event timer_tick(); main_TcpNet(); } }
Если не сложно подскажите что не так или как у вас эта часть сделана. Кайл никаких вразумительных ответов не дает, если ставлю TCP_TYPE_KEEP_ALIVE, вообще не соединяется.
|
|
|
|
|
Jun 15 2011, 08:29
|
Местный
  
Группа: Свой
Сообщений: 353
Регистрация: 11-09-06
Из: Минск
Пользователь №: 20 282

|
Цитата(Аматер @ Jun 14 2011, 16:34)  Если не сложно подскажите... Я в call-back-e устанавливаю сигнал, а потом в задаче читаю данные. Вот demo-проектик.
Прикрепленные файлы
eth.zip ( 62.71 килобайт )
Кол-во скачиваний: 40
|
|
|
|
|
Jun 16 2011, 12:29
|

Частый гость
 
Группа: Участник
Сообщений: 95
Регистрация: 3-01-10
Из: Рождественно
Пользователь №: 54 616

|
Цитата(evg123 @ Jun 15 2011, 11:29)  Я в call-back-e устанавливаю сигнал, а потом в задаче читаю данные. Вот demo-проектик. Спасибо. Главной ошибкой у меня было то что timer_tick вызывал вместе с main_TcpNet. Как только я вынес timer_tick в отдельную задачу вызываемую раз в 100 мс все заработало. Непонятно только почему.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|