вызов функции на С - Версия для печати +- DC-SWAT Forum (http://www.dc-swat.ru/forum) +-- Форум: DreamShell (/forum-3.html) +--- Форум: Programming (/forum-28.html) +--- Тема: вызов функции на С (/thread-2096.html) |
RE: вызов функции на С - SWAT - 17.02.2014 16:08 А в KATANA SDK и тредов то нету, так, зачаток один валяется. Так что игры активно использовали именно прерывания. Да в этой задаче по сути и не нужны треды. Нужен двойной буфер, на один натравил привод, пока он читает в него, ты пишешь на карту другой. Когда прерывание дернулось от привода, ты - ага щас, подожди допишу - дописал - натравил на другой буфер привод, а сам пишешь тот что только что заполнился и т.д. Будет экономится время процессора, которое он простаивал во время чтения диска, что в итоге больше даст времени для записи на карту, где оно нужнее. RE: вызов функции на С - megavolt85 - 17.02.2014 17:47 SWAT где можно почитать о прерываниях в KOS RE: вызов функции на С - SWAT - 19.02.2014 11:58 Да как бы все там же, в документации по API KOS http://gamedev.allusion.net/docs/kos-current/asic_8h.html Пример: PHP код: static void g1_dma_done_irq(uint32 src) { Но что-то я сейчас посмотрел, тебе придется что-то придумать с сисколом gdc_exec_server, так как чтобы твоя команда сработала, нужно дергать этот сискол в цикле и опрашивать состояние. http://sourceforge.net/p/cadcdev/kallistios/ci/master/tree/kernel/arch/dreamcast/hardware/cdrom.c#l99 В принципе проще наверное было бы попробовать на тредах сделать, так как драйвер привода в KOS расчитан на это. Накладные расходы я думаю не должны быть существенными. Создай отдельный тред для чтения диска и поставь там семафор. Когда нужны будут новые данные, посигналишь семафору и тред отработает свой цикл пока не встанет на семафоре опять (естественно цикл нужно сделать самому). RE: вызов функции на С - Wind - 20.02.2014 09:29 По мне проще обойтись без KOS напрямую с железом поработать. В дриме все довольно простенько в этом плане. RE: вызов функции на С - SWAT - 20.02.2014 13:13 Это тебе проще, ты железо знаешь. А ему чем проще то? Он программировать то только учится, а ты его на железо отправляешь RE: вызов функции на С - megavolt85 - 01.03.2014 19:12 Что то с тредами у меня не заладилось. Для пробы решил запустить такой код PHP код: /* parallelCopy.c */ при сборке получаю ошибку PHP код: megavolt@megavolt-GA-790XTA-UD4:~/dreamcast/SDK/examples/commands/parallelCopy$ make если в коде убрать if (thd_init(THD_MODE_COOP) != 0) ds_printf("Treads alredy initialized."); , то сборка проходит успешно ,но при запуске в lxdream получаю PHP код: D$: pcp /cd/1DS_CORE.BIN /ram/1.bin откуда undefined reference to `_thd_init' ? Какой библиотеки не видит линкер? RE: вызов функции на С - SWAT - 02.03.2014 08:49 Не нужно тебе вызывать thd_init, она вызывается в самом начале KOS всегда. Проблема я подозреваю в том, что в RC1, KOS отличается от той, что стоит у тебя. Как раз в этот промежуток времени если мне не изменяет память, были изменения в тредах, функции для них раньше не возвращали никаких значений. В общем чтобы не было конфликтов, тебе надо бы выкачать вот эту ревизию: http://sourceforge.net/p/cadcdev/kallistios/ci/8a908382c7e57d771b2bb42a21f2f562cbda20ae/tree/ Ну и так, на будущее. Не мешай использование разных типов функций. Раз уж ты используешь KOS'овкие функции для файловой системы, то и придерживайся этому везде: Код: lseek -> fs_seek Хоть и дескрипторы они используют одни и те же, но все же путаницу в коде это создает. А вообще размер файла можно узнать проще: PHP код: size_t size = fs_total(fin); Ну и не понятно зачем ты такой стресс тест устроил файловой системе. Ты же читаешь и пишешь одни и те же файлы сразу в 3-х местах одновременно. P.S. Если есть желание двигаться в этом направлении и дальше (программирование для DS), то могу дать доступ к DEV версии, там кстати есть начатое (и в данный момент отложенное) приложение для рипа. RE: вызов функции на С - megavolt85 - 02.03.2014 14:09 Цитата:Если есть желание двигаться в этом направлении и дальше (программирование для DS) С удовольствием подключусь к программированию P.S. Мда.... увидел свой косяк.... в KOS 1.2 не было thd_join, вместо нее была функция thd_wait RE: вызов функции на С - SWAT - 02.03.2014 19:14 Смотри личку. |