Перейти к содержанию
    

RTOS для ARM7, какую выбрать? Отзывы и мнения.

Короче нет маленьких и понятных RTOS с такой фичей.

Нужна виртуализация памяти, а это уже только в толстых осях.

Динамическая линковка относится к виртуализации памяти как теплое к мягкому :), ну мы то знаем что вероятно имелся ввиду механизм типа Memory-Mapping Unit :). Но он тоже относится к связыванию как сладкое к мягкому :). Сложного в связывании загружаемого модуля любым из упомянутых способов никаких нет. Скажете в MS-DOS тоже маппинг памяти был? Ладно, пример неудачный, там модель памяти x86 сегментно-самобытная. А ucLinux эльфы не грузит? Если уж не охота разбираться с перемещаемым форматом (а перемещаемость-то далеко не всегда и нужна), то можно выполнить статическую линковку (при построении модуля линкером) для фиксированного адреса или вообще писать загружаемый модуль а-ля PIC.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А ucLinux эльфы не грузит?

 

prex поддерживает elf relocation и прекрасно работает на arm без mmu, но не знаю почему Александр считает что его все хотят обмануть :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

prex поддерживает elf relocation и прекрасно работает на arm без mmu, но не знаю почему Александр считает что его все хотят обмануть :)

 

Да мусор там, чесно повелся на вашу ссылку.

Там не функции, а одни затычки. Там не то что elf relocation нет, там даже elf загрузчика нет нормального.

А если видели то покажите в каком файле.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там не то что elf relocation нет

Это там есть - root/usr/arch/arm/elf_reloc.c

А вот саму основную часть загрузчика я пока не нашел :)

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это там есть - root/usr/arch/arm/elf_reloc.c

А вот саму основную часть загрузчика я пока не нашел :)

 

root/usr/server/exec/exec_elf.c

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос из разряда TNKernel vs RTX

В железке на Crotex-M3 необходимо использовать вытеснение прерываний.

Для RTX написано что PRIGROUP должен быть равен нулю и ни каких гвоздей. А это означает что нет вытеснения.

Я правильно понимаю что для TNKernel таких ограничений нет?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Осознал, был не прав. Если PRIGROUP=0, то все биты задают приоритет вытеснения.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу прощения что влезаю, но тема кажется подходящая.

У меня такой вопрос, можно ли под какую-нибудь RTOS написать приложение изначально в проекте не присутствующее, но которое можно будет подгрузить, не переписывая при этом файлы системы. То есть аналог .exe в Windows.

VxWorks

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А я на свою голову на RTX заложился, теперь думаю может все-таки перескочить на что нибудь еще. Проблемы начались с Ethernet, а исходников нет. Это конечно не к операционке, а библиотеке относится, но тем не менее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А я на свою голову на RTX заложился, теперь думаю может все-таки перескочить на что нибудь еще. Проблемы начались с Ethernet, а исходников нет. Это конечно не к операционке, а библиотеке относится, но тем не менее.

А какой у вас поц.? У меня был LM3S8972, там вместе с китом были дрова для Ethrnet-a и пример для RL-TCPnet. Нормально запустился и работал. Я на его основе сделал вполне неплохое приложение. Если надо - выложу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А какой у вас поц.? У меня был LM3S8972, там вместе с китом были дрова для Ethrnet-a и пример для RL-TCPnet. Нормально запустился и работал. Я на его основе сделал вполне неплохое приложение. Если надо - выложу.

У меня LPC1766 использую RL-TCPnet. Соединение работает, но закрывается через время тайм аута. У вас такого не было? У меня код такой -

 

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, вообще не соединяется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если не сложно подскажите...

Я в call-back-e устанавливаю сигнал, а потом в задаче читаю данные.

Вот demo-проектик.

eth.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я в call-back-e устанавливаю сигнал, а потом в задаче читаю данные.

Вот demo-проектик.

Спасибо.

Главной ошибкой у меня было то что timer_tick вызывал вместе с main_TcpNet. Как только я вынес timer_tick в отдельную задачу вызываемую раз в 100 мс все заработало. Непонятно только почему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...