LINUX.ORG.RU

Релиз встраиваемой системы реального времени Embox v0.4.0

 , , , ,


3

3

8 января 2020 года вышел релиз встраиваемой системы реального времени Embox v0.4.0.

  • Добавлена частичная поддержка архитектуры RISC-V
  • Добавлен ряд поддерживаемых платформ в том числе и Байкал-Т
  • Переработаны несколько подсистем (USB, FS, ..)
  • Добавлена подсистема MMC
  • Добавлен ряд драйверов

>>> Подробности

★★★

Проверено: a1batross ()
Последнее исправление: a1batross (всего исправлений: 1)
Ответ на: комментарий от SZT

а почему тут, почему нет какого-нибудь дефайна STACK_SIZE чтоб была конфигурируемость ?

редко используемый код :(

Ну да, причем на мой взгляд здесь уместно PAGE_SIZE использовать.

abondarev ★★★
() автор топика
Ответ на: комментарий от SZT

Все та же проблема со стеком - например в MIPS нет явных инструкций типа push/pop и их реализуют через инструкции типа load/store с адресацией относительно какого-то регистра, т.е. направление роста стека там зависит от ABI

Согласен, как уложить зависит от ABI, но конкретно здесь, это наше внутреннее представлние, и главное чтобы push pop были согласованы между собой. Правда я могу ошибаться :)

Функция stack_push_str может записать строку произвольной длинны т.е. значение stack может быть не кратно 4 байтам - нехоршо.

Согласен, но тут оно и не кратное, хотя использовать uint32_t конечно не хорошо, на 64 разрядных не будет работать. Пораметр uint32_t *stack вроде всегда разименовывается, то есть адресной арифметики там нет. Но повторюсь плохой код, хотя и корректный для 32 разрядных систем.

Да и вызов функции memcpy несколько настораживает, я б использовал что-то типа __builtin_memcpy хотя вы наверно не только совместимые с GNU __builtin компиляторы поддерживаете.

__builtin_memcpy можно использовать, но Вы правы его может и не быть в компиляторе. Простая реализация memcpy реализована в явном виде, по дефолту пусть и медленно будет рабоать.

abondarev ★★★
() автор топика
Ответ на: комментарий от abondarev

Согласен, как уложить зависит от ABI, но конкретно здесь, это наше внутреннее представлние, и главное чтобы push pop были согласованы между собой. Правда я могу ошибаться :)

Думаю, нет. По-моему в коде функции fill_stack() у вас происходит занесение в стек создаваемого процесса аргументов для main() т.е. int argc , char * argv [], char * envp [].

Вот например комментарий из start.S для glibc для архитектуры x86 ссылка на полный код

/* This is the canonical entry point, usually the first thing in the text
   segment.  The SVR4/i386 ABI (pages 3-31, 3-32) says that when the entry
   point runs, most registers' values are unspecified, except for:

   %edx		Contains a function pointer to be registered with `atexit'.
		This is how the dynamic linker arranges to have DT_FINI
		functions called for shared libraries that have been loaded
		before this code runs.

   %esp		The stack contains the arguments and environment:
		0(%esp)			argc
		4(%esp)			argv[0]
		...
		(4*argc)(%esp)		NULL
		(4*(argc+1))(%esp)	envp[0]
		...
					NULL
*/
потом этот start.S вызывает __libc_start_main

Вот тут собственно описывается то, как можно руками получить эти аргументы без main() : https://stackoverflow.com/q/50260855

Если у вас по ABI надо чтоб стек рос от младших адресов к старшим (сверху вниз), данный код будет некорректным.

SZT ★★★★★
()
Ответ на: комментарий от SZT

Сходу не скажу.:( Нужно посмотреть подробнее. Но стек растет от старших адресов к младшим, это точно!

abondarev ★★★
() автор топика

Поддерживается ли платформа imx6 и как организованна работа с многоядерными системами?

splinter ★★★★★
()
Ответ на: комментарий от splinter

Поддерживается ли платформа imx6

Да, поддерживается.

  • sabrelite для qemu
  • sk_imx6q можно купить у стартеркита.

Достаточно полный спектр устройств, даже удалось 3d (vivante GC2000) графику в каком то виде оживить с помощью ethna_viv (правда пока только напрямую через gallium)

как организованна работа с многоядерными системами? Не очень хорошо, поскольку пока не очень востребованное направление. То есть, можно запустить планирование на нескольких ядрах, но насколько это будет эффективно сильно зависит от ситуации и конкретной задачи.

abondarev ★★★
() автор топика
Ответ на: комментарий от fehhner

и если ты напишешь про 2к2 год на каком-нибудь форуме, все подумают про 2002

1. Я так не напишу. Никакого смысла заменять 2020 на 2к02 или 2к20 нету.
2. Номиналы резисторов пишутся именно так. Приставка-множитель пишется на месте десятичной точки.
3. Мне в общем-то пофиг.

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 3)
Ответ на: комментарий от abondarev
make confload-arm/qt-stm32f7discovery


src/net/socket/tcp_sock.c:423:3: error: 'cp_off' may be used uninitialized in this function [-Werror=maybe-uninitialized]
   memcpy(((void *)(skb->h.th + 1) + cp_off), pb, cp_len);
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/net/socket/tcp_sock.c:386:6: note: 'cp_off' was declared here

splinter ★★★★★
()
Ответ на: комментарий от splinter

splinter, огромное спасибо!

Поправили. В мастере должно работать.

Если не трудно, такие вещи лучше либо issue на github заводить, либо в телеграмм или рассылку написать, а то мог и пропустить. :)

abondarev ★★★
() автор топика
26 февраля 2020 г.
Ответ на: комментарий от AlexVR

Задача уже классическая: скорость реакции на Ethernet пакет.

написали как решали задачу про скорость реакции ethernet пакета

abondarev ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.