Board.KolibriOS.org

Official KolibriOS board
It is currently Tue Apr 07, 2020 2:30 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 1138 posts ]  Go to page Previous 145 46 47 48 4976 Next
Author Message
PostPosted: Thu Mar 07, 2013 9:10 pm 
Offline

Joined: Sat Mar 02, 2013 3:20 pm
Posts: 7
Чтоб не плодить темы. Как выделить память? Нашел Sys68 функция 12, но там написано, что выделяется 4кб. Мне нужно по 12-100 байт примерно, но часто, эта функция каждый раз по 4кб будет выделять?


Top
   
PostPosted: Thu Mar 07, 2013 9:14 pm 
Offline

Joined: Mon Sep 24, 2007 11:11 am
Posts: 2814
Ограничение менеджера памяти - 4 кб. Нужно меньше, но чаще - советую использовать свой менеджер памяти, в пользовательском режиме.


Top
   
PostPosted: Thu Mar 07, 2013 9:15 pm 
Offline

Joined: Sat Mar 02, 2013 3:20 pm
Posts: 7
SoUrcerer wrote:
Ограничение менеджера памяти - 4 кб. Нужно меньше, но чаще - советую использовать свой менеджер памяти, в пользовательском режиме.

В смысле "написать самому"? В ядре такая же ситуация с выделением памяти?


Top
   
PostPosted: Fri Mar 08, 2013 7:09 am 
Offline
User avatar

Joined: Tue May 08, 2007 12:44 am
Posts: 346
Вроде у johnfound во FreshLib весьма развитый менеджер памяти, не?

_________________
Разработчик языка программирования Кантор


Top
   
PostPosted: Fri Mar 08, 2013 8:35 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Sergo
Тебе нужна malloc, 68.12 ей не является.


Top
   
PostPosted: Sat Mar 09, 2013 11:23 pm 
Offline

Joined: Sat Mar 02, 2013 3:20 pm
Posts: 7
Где можно посмотреть, что делает int 0x40, когда eax=5? По вики это пауза, по логике программы тут вывод строки...


Top
   
PostPosted: Sat Mar 09, 2013 11:35 pm 
Offline

Joined: Wed May 18, 2005 7:27 pm
Posts: 1001
Где тут? Код выложи или прикрепи.


Top
   
PostPosted: Sat Mar 09, 2013 11:38 pm 
Offline

Joined: Sat Mar 02, 2013 3:20 pm
Posts: 7
Code:
align 4
; void __stdcall sc_puts(char *str);
_sc_puts:

 push esp
 push ebx

 mov esi, [esp+12]
 mov edi, [sc_buffer]
 mov al, SC_PUTS
 stosb

@@:
 lodsb
 stosb
 test al, al
 jnz @b

 mov ebx, [sc_buffer]

@@:
 mov byte dl, [ebx]
 test dl, dl
 jz @f
 push ebx
 mov eax, 5
 mov ebx, 5
 int 0x40
 pop ebx
 jmp @b

@@:

 pop ebx
 pop esp
 ret 4
 


нашел, когда искал, как вывести строку в консоль, хочу адаптировать под свои нужды


Top
   
PostPosted: Sun Mar 10, 2013 12:43 am 
Offline
Mentor
User avatar

Joined: Tue Jan 15, 2008 11:27 am
Posts: 753
Sergo wrote:
Где можно посмотреть, что делает int 0x40, когда eax=5? По вики это пауза, по логике программы тут вывод строки...

Sergo wrote:
нашел, когда искал, как вывести строку в консоль, хочу адаптировать под свои нужды

Узнаю свой код. 5-я функция - это действительно пауза. В коде представлена функция вывода строки с нулевым последним байтом для консольных приложений Shell по особому интерфейсу.
1) Консольное приложение Shell, запущенное из него, должно создать именованную область pid-SHELL, где PID - этого приложения. Именованная область - буфер, через который передаются команды и данные.
2) Команд немного (максимальное количество - 255+1) и они есть в инклуде (начинаются с SC_).
3) Функция sc_puts выводит строку - записывает в нулевой байт буфера константу SC_PUTS, а с первого байта - нужную строку. И ожидает до тех пор, пока Shell эту строку не выведет (и установит нулевой байт в константу SC_OK). Чтобы не расходовать процессорное время между проверками нулевого байта, используется 5-я функция. Интервал 0,05 с вполне достаточен, чтобы снизить нагрузку процессора и оставить консольное приложение отзывчивым.


Top
   
PostPosted: Sun Mar 10, 2013 9:17 am 
Offline

Joined: Sat Mar 02, 2013 3:20 pm
Posts: 7
Спасибо за обстоятельный ответ! :)


Top
   
PostPosted: Sun Mar 10, 2013 8:57 pm 
Offline

Joined: Sat Mar 02, 2013 3:20 pm
Posts: 7
я сдаюсь. код вот такой

Code:
START:            ; start of execution

    call  _sc_init
    mov   dword [state], STATE_CONFIG_GLOBAL
    ;call  clear_token_list

main_loop:
    push    dword user_input_raw
    call    _sc_gets
    push    dword test_input
    call    _sc_puts
    push    dword user_input_raw
    call    _sc_puts
    jmp main_loop
test_input  db  'test string',0
user_input_raw rb 256



По идее, после прочитанной строки и перед выводом ее код должен печатать мою строку (test string), но этого не происходит. Печатает только введенную строку. Перед выводом строка должна быть как-то хитро сформирована? В отладчике не могу отловить момент сразу после ввода строки, чтобы посмотреть, что на самом деле происходит...


Top
   
PostPosted: Sun Mar 10, 2013 9:43 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
1. Вместо ф.5 можно использовать ф.68.1 - это более обосновано сточки зрения работы операционной системы в целом.
2. Все же вместо того чтобы заставлять других гадать на кофейной гуще, полезней было бы выложить весь исходник. Вероятность нахождения причины проблемы в этом случае будет существенно выше.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sun Mar 10, 2013 10:12 pm 
Offline

Joined: Sat Mar 02, 2013 3:20 pm
Posts: 7
Вопрос снимается.
Я просто все незначительное убрал из кода, что бы не загромождать, на самом деле было так

Code:
param_area   rb  256
app_path   rb  256
test_input  db  'test string',10,13,0
user_input_raw rb 256


Ну и rb затирали нулями строку(Почему, кстати?). Перенес строку выше - все ок стало. Песец, 3 часа убил на это...


Top
   
PostPosted: Sun Mar 10, 2013 10:22 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Sergo wrote:
Ну и rb затирали нулями строку(Почему, кстати?).

А вот это задачку стоит решить самому, тогда получишь очередной LevelUP в навыках.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Tue Mar 12, 2013 1:47 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Вернусь к своему давнему сообщению viewtopic.php?f=2&t=684&p=43100#p43100
Ну вот давайте на примере t_edit:

Запускаем программу.

Нажимаем на кнопку с папкой — появляется OpenDialog. Пока уберём его немного в сторону.
Spoiler: Show
Image

Теперь снова нажимаем кнопку с папкой, но отпускаем мышь не сразу(ждём немного). И обращаем внимание на OpenDialog.
Spoiler: Show
Image

Оно так и должно быть?


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1138 posts ]  Go to page Previous 145 46 47 48 4976 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited