Board.KolibriOS.org http://board.kolibrios.org/ |
|
Помогите новичку http://board.kolibrios.org/viewtopic.php?f=2&t=684 |
Страница 69 из 74 |
Автор: | GerdtR [ Пт авг 21, 2015 4:51 am ] |
Заголовок сообщения: | Re: Помогите новичку |
Нашёл я, кого сдвинул. В data32.inc есть кусок данных от метки gdts(строка 236) и до метки gdte. Вставляю строчку "times 200 db 0" перед этими данными - вылетает. Вставляю после них - всё работает. Причём если добавлю 170 байт перед gdts, то работает, добавлю 171 - нет. Найти - нашёл... И? Метка gdts ещё в ядре кое-где используется. Только всё равно не понимаю, как положение этих данных влияет на ОС. |
Автор: | GerdtR [ Пт авг 21, 2015 6:58 pm ] |
Заголовок сообщения: | Re: Помогите новичку |
Методом проб и ошибок вывел, что если выровнять gdte по границе 256, то работает. По крайней мере пока не вылетел, посмотрим. Короче баг замазал, но причину вылета всё равно не понял. |
Автор: | MorningStar [ Пн авг 31, 2015 8:23 pm ] |
Заголовок сообщения: | Re: Помогите новичку |
Добрый вечер. Подскажите, пожалуйста. Функция #2 возвращает XT-сканкоды с любой клавиатуры? (AT/XT/USB) Похоже я ошибся. Клавиши стрелок дают не экстишные коды. Ужс, я хотел, по табличке сделать, а придется программой "Сканкоды клавиатуры" все клавиши прозванивать. |
Автор: | Leency [ Вт сен 01, 2015 1:00 pm ] |
Заголовок сообщения: | Re: Помогите новичку |
Добрый, функция возвращает и ASCII и SCANCODE. Посмотри http://websvn.kolibrios.org/filedetails ... yascii.asm |
Автор: | MorningStar [ Вт сен 01, 2015 1:37 pm ] |
Заголовок сообщения: | Re: Помогите новичку |
Да, я знаю. |
Автор: | MorningStar [ Вт сен 01, 2015 7:57 pm ] |
Заголовок сообщения: | Re: Помогите новичку |
И снова здрасьте. Мне опять нужна помощь. Что такое стек потока, и где взять указатель на стек нового потока? Я гуглил, я смотрел примеры, но ничего не понял. Здесь, например, указатель стека потока взят 0x80000. Если я правильно понял, это указатель стека основного потока (в ассемблере не разбираюсь). Я пишу на С, и не знаю, на что указывает указатель стека основного потока. Как быть? Альтернативный вопрос. Научите использовать функцию #51 из С-программы. Все, короче. Посмотрел отладчиком. Указатель стека основного потока совпадает с размером используемой памяти. И если я правильно понимаю, размер используемой памяти вытаскивается функцией 9. |
Автор: | GerdtR [ Чт сен 03, 2015 2:26 am ] |
Заголовок сообщения: | Re: Помогите новичку |
Вообще-то стек основного потока ровно там, где выделишь память(ну или зарезервирована) и укажешь в заголовке. Очень часто место резервируют в самом конце программы и указатель, разумеется, указывает на конец используемой памяти. Если нужен новый поток, то или зарезервируй сразу(массив какой сделай, у указатель дай ИмяМассива+РазмерМассива) или выдели функцией #68,12. Ну и указатель также вычисляется. |
Автор: | MorningStar [ Чт сен 03, 2015 3:50 pm ] |
Заголовок сообщения: | Re: Помогите новичку |
GerdtR, спасибо. Что-то я промучался, да так и не получилось. Точку входа сделал на void (cfunction(void)) функцию. После создания потока выполняется код этой функции и программа заканчивается. Кодить под KolibriOS, однако сложно, ибо много чего не понятно, и получается тыканье пальцем в небо. |
Автор: | Pathoswithin [ Чт сен 03, 2015 8:00 pm ] |
Заголовок сообщения: | Re: Помогите новичку |
Скажу на всякий случай, что стек растёт из конца в начало. Если выделять под него память, то указывать нужно конец массива. В любом случае, перед указателем должно быть свободное место. |
Автор: | MorningStar [ Пт сен 04, 2015 12:13 am ] |
Заголовок сообщения: | Re: Помогите новичку |
Таки не осилил, как правильно сделать. Код: void kolibrios_DialogThread(void) Хотел, чтобы при вызове функции DialogsShowSimpleMessageBox, создавался поток для еще одного окошка. Но после вызова функции, сразу 2 раза вызывается функция kolibrios_DialogThread, пишет "aa" на доске отладки, и на этом программа завершается, не знаю, почему. А есть программы на С, где можно посмотреть, как это все правильно делается? |
Автор: | Veliant [ Пт сен 04, 2015 11:17 am ] |
Заголовок сообщения: | Re: Помогите новичку |
Если используете menuetlibc то там есть функция create_thread У меня другое API, но выглядит примерно следующим образом Код: int kos_CreateThread(void *proc, void *data) В нем аллоцируется память под стек, в последний dword пишется аргумент функции, в предпоследний пишется ret-адрес на функцию корректно завершающую поток на случай если программист не вызовет ее явно |
Автор: | GerdtR [ Вт сен 08, 2015 9:56 pm ] |
Заголовок сообщения: | Re: Помогите новичку |
Всё таки не понимаю, почему у меня вылетает ядро: вылетает на 302 строке в kernel.asm: jmp pword os_code:high_code. В боксе смотрю код по high_code - всё нормально. Но шаг - и вылет. Данные в gdts никто не затирает. Не понимаю. |
Автор: | Yason [ Вс окт 04, 2015 2:52 am ] | ||
Заголовок сообщения: | Re: Помогите новичку | ||
Судя по описанию с.ф. 4, можно делать вывод строки, в область пользователя. Спойлер: Показать Спойлер: Показать ![]() ![]() Полный тестовый файл прикрепил.
|
Автор: | Anton_K [ Вс окт 04, 2015 3:25 am ] |
Заголовок сообщения: | Re: Помогите новичку |
Yason, а ты обратил внимание на вот эти строки? Цитата: область пользователя выглядит так: Xsize = dword Ysize = dword остаток области = Xsize*Ysize*4 То есть, для функции 4 в первых 8 байтах буфера должны быть указаны ширина и высота, а потом уже идут данные о пикселях. Но в код я особо не вникал, возможно, что проблема в чем-то другом ![]() |
Автор: | Yason [ Вс окт 04, 2015 3:44 am ] |
Заголовок сообщения: | Re: Помогите новичку |
Буфер выделял вот так... Код: char_addr: db char_width*char_height*4 dup (0x33) |
Страница 69 из 74 | Часовой пояс: UTC+03:00 |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |