www.open-tager.ru http://www.open-tager.ru/forum/ |
|
Система Caustic http://www.open-tager.ru/forum/viewtopic.php?f=5&t=4128 |
Страница 75 из 108 |
Автор: | Alexies [ 07 июн 2016, 21:55 ] |
Заголовок сообщения: | Re: Система Caustic |
Я тут потратился на TSOPы, заказал 100 штук в Элитане. С доставкой обошлось примерно в 28 р/шт. Вот так выглядит рейка на 90 тсопов: Вложение: tsops.JPG [ 70.23 KiB | Просмотров: 7104 ] |
Автор: | Pacifist [ 07 июн 2016, 22:14 ] |
Заголовок сообщения: | Re: Система Caustic |
Alexies писал(а): Я тут потратился на TSOPы, заказал 100 штук в Элитане. С доставкой обошлось примерно в 28 р/шт. Вот так выглядит рейка на 90 тсопов: Вложение: tsops.JPG Ого Готовитесь к серийному производству? |
Автор: | Alexies [ 07 июн 2016, 23:49 ] |
Заголовок сообщения: | Re: Система Caustic |
Pacifist писал(а): Ого Готовитесь к серийному производству? Почти) Хочу сделать комплектов 10, чтобы можно было играть целиком на моей системе. Тогда будет иметь смысл статистика и управление игрой с телефона |
Автор: | LTagKirov [ 08 июн 2016, 00:45 ] |
Заголовок сообщения: | Re: Система Caustic |
Alexies писал(а): Я тут потратился на TSOPы, заказал 100 штук в Элитане. С доставкой обошлось примерно в 28 р/ш Почему не сразу из китая ? Цена получилась бы в два раза меньше |
Автор: | Pingvin [ 08 июн 2016, 06:14 ] |
Заголовок сообщения: | Re: Система Caustic |
Немного научившись пользоваться скритами линкера хочу сделать следующее - создать бинарную разделяемую библиотеку, некий аналог dll То есть, пишем функции, а в специальной секции в определённой последовательности создаём массив с указателями на эти функции. Компилируем, бинарик прошиваем. Но мы теперь знаем, по какому адресу лежит массив с указателями на функции, и в какой последовательности идут функции! Теперь в основной прошивке (бутлоадере) просто нужно подключить заголовочный файл с описанием функций, а точнее - с указателями, типизованными для наших функций. Какие плюсы? Ну эти функции будут доступны и из бутлоадера, и из основной прошивки (не будут дублироваться - экономия флеша)! Например - драйвера для экранчика, воспроизведения звука... Второй жирный плюс - не важно, как написаны функции, с использованием HAL или библиотек STM - в чем удобно, в том и пиши! Ну и как плюсик - можно от пользователя "спрятать" низкоуровневую работу с железом, не забивая ему голову, оставив в исходниках только игровую логику и API для работы с железом - функции воспроизведения звуков, вывода на экран текста и картинок. И напоследок - можно будет просто менять эти библиотеки (драйвера) не трогая основную прошивку. Вместо черно-белого экранчика подключил цветной и просто заменил драйвер! Ну и совсем будет хорошо - если мы договоримся и стандартизируем эти функции (API) для наших прошивок. Прям нирвана... Подумайте... Я, в принципе - знаю, как это сделать. Осталось это сделать грамотно... |
Автор: | onegray [ 08 июн 2016, 11:20 ] |
Заголовок сообщения: | Re: Система Caustic |
Лучше не по хардкорным адресам, а таблицу векторов, по аналогии с прерываниями. Кроме того, у проца есть специальная инструкция (SVC), которая позволяет передать управление в ОС без использования абсолютных адресов. А помудрив немного с ассемблерными инструкциями - сделать кросс-вызов на реализацию из прокси-функции без модификации точки возврата в LR, можно сделать красивый API без использования указателей на функции. Но настоящей "нирваны", с раздельными стеками и привилегированными режимами вам не достичь, пока не соскочите с RTOS ))) |
Автор: | Alexies [ 08 июн 2016, 12:09 ] |
Заголовок сообщения: | Re: Система Caustic |
2Pingvin, 2opengrey Нененене! Никаких массивов с указателями и других велосипедов! Есть C++, виртуальные функции. Есть vtable у полиморфных объектов. Во все времена это делали так: в хедере определен интерфейс (полностью абстрактный класс с нужными функциями), где-то в другом месте есть его реализация (наследник, который определяет методы). И где-то есть фабрика, или фабричный метод, который по запросу порождает экземпляр наследника. https://ru.wikipedia.org/wiki/%D0%98%D0 ... 8%D1%8F%29 https://ru.wikipedia.org/wiki/%D0%90%D0 ... 8%D1%8F%29 Я делал почти так, как вы пишете, но на C++. Сначала я хотел использовать stm32f100cbt6, но потом понял, что мало. У меня вся логика была в статической библиотеке, а вся работа с железом - через свой собственный HAL. Когда я переходил с одного чипа на другой, некоторое время прошивка собиралась под оба. Но потом я решил, что это всё не нужно в силу ряда причин, и собираю теперь единый бинарник. Причины такие:
Также, моё мнение, что обновлять отдельные части прошивки - не нужно ни в какой ситуации. Проще написать "коструктор прошивок" для PC, и линковать прошивку на компе. Как минимум, потому, что ошибки при статической линковке отловить элементарно, а в рантайме - крайне затруднительно. А с точки зрения пользователя один фиг перепрошивать. |
Автор: | Pingvin [ 08 июн 2016, 12:13 ] |
Заголовок сообщения: | Re: Система Caustic |
Ну что же - жаль. Я все же попробую. Мне кажется - Вы меня не совсем правильно поняли. Как будет размер расти, если нужные функции собраны один раз а вызываем их мы и из прошивки, и из бутлоадера? Их функций то всего - с десяток! Но могут быть "тяжёлыми" для дублирования и в бутлоадере и в прошивке. Шрифты, картинки... Картинка на весь экранчик (герб России) - 34Кб, к примеру. Не... с SD карты можно выводить картинки, но они медленнее грузятся, для бьющегося сердечка (теперь это будет "фича" Армады) - скорость низка, только DMA и флеш! FreeRTOS - конечно в основной прошивке! Речь скорее о "драйверах". Уже пробую Код: MEMORY { RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K CCMRAM (xrw) : ORIGIN = 0x00000000, LENGTH = 0 FLASH (rx) : ORIGIN = 0x08069800, LENGTH = 44K FUNC_ARR (rx) : ORIGIN = 0x08069000, LENGTH = 2K INTERRUPTS_STUB (rx) : ORIGIN = 0x8000000, LENGTH = 4K MEMORY_ARRAY (xrw) : ORIGIN = 0x00000000, LENGTH = 0 } Код: SECTIONS { /* * For Cortex-M devices, the beginning of the startup code is stored in * the .isr_vector section, which goes to FLASH */ .isr_vector_stub : { . = ALIGN(4); _isr_stub = .; KEEP(*(.isr_vector_stub)) . = ALIGN(4); } >INTERRUPTS_STUB .func_pointer_arr : { . = ALIGN(4); _func_p_arr = .; KEEP(*(.func_pointer_arr)) . = ALIGN(4); } > FUNC_ARR Код: #include <stdio.h> typedef void (* const pFunc)(void); extern int summ(int, int); extern int multiplication(int, int); __attribute__ ((section(" .func_pointer_arr"),used)) pFunc func_pointers_array[] = { pFunc(summ), pFunc(multiplication), pFunc(0x0), pFunc(0x0) }; Код: #include <stdio.h> int summ(int x, int y){ return (x+y); } int multiplication(int x, int y){ return (x*y); } Правильно? |
Автор: | Alexies [ 08 июн 2016, 13:12 ] |
Заголовок сообщения: | Re: Система Caustic |
LTagKirov писал(а): Alexies писал(а): Я тут потратился на TSOPы, заказал 100 штук в Элитане. С доставкой обошлось примерно в 28 р/ш Почему не сразу из китая ? Цена получилась бы в два раза меньше Не посоветуете таких китайцев? Я не нашел. Обычно на Ebay и Ali тсопы очень дорогие. |
Автор: | MidnightDreamer [ 08 июн 2016, 13:59 ] |
Заголовок сообщения: | Re: Система Caustic |
На али партия сразу 100шт стоит с доставкой 1700р |
Страница 75 из 108 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |