Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Dec 07, 2019 11:29 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 231 posts ]  Go to page Previous 14 5 6 7 816 Next
Author Message
 Post subject:
PostPosted: Sun Sep 24, 2006 11:18 am 
Offline

Joined: Mon Apr 10, 2006 7:22 am
Posts: 76
А есть что либо для SVN весящее поменьше, желательно менее 1 МБ?


Top
   
 Post subject:
PostPosted: Sat Oct 07, 2006 9:05 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Вот ещё две интересные особенности :
1) Функция такого вода скомпилируется без проблем, но возвращает неопределённо значение, а вовсе не 0 как многие другие компилеры.
Code:
int func(){
}


2) Процедура int _msys_get_process_table(process_table_entry* proctab,int pid); работает правильно но с двумя нюансами :
а) структура proctab должна иметь размер 1Kb, в противном случае (при использовании структуры process_table_entry, размер которой меньше) происходит затирание части кода/данных и как следстви "нестабильная" работа программы.
б) тоже связано со структурой : дело в том, что tcc варанивает все данные по длинне машинного слова (4 байта), и получается что например process_table_entry.winx_start имеет смещение не 0x22 а совсем другое, и пользоватся структурои невозможно.
Писать полную реализацию мне некогда/незачем, для себя использовал такой код :
Code:
void CheckSize(int *xs, int *ys){
// xs, ys - размеры окна, устанавливаются в соответствии с действительным положением
   char *pce = malloc(1024);
   //~ [ebp + 8 ] -> xs
   //~ [ebp + 12] -> ys
   //~ [ebp - 4 ] -> pce
   
   asm("movl   $9, %eax");
   asm("movl   -4(%ebp), %ebx");
   asm("movl   $-1, %ecx");
   asm("int   $0x40");
   asm("movl   8(%ebp), %eax");
   asm("movl   (%eax), %ecx");   // xs
   asm("movl   12(%ebp), %eax");
   asm("movl   (%eax), %edx");   // ys
   asm("cmpl   42(%ebx), %ecx");
   asm("jne   13");         // не трогать (весь код)
   asm("cmpl   46(%ebx), %edx");
   asm("je   41");         // не трогать (весь код)
   asm("movl   8(%ebp), %eax");   // xs = pce.winx_size
   asm("movl   42(%ebx), %ecx");
   asm("movl   %ecx, (%eax)");
   asm("movl   12(%ebp), %eax");   // ys = pce.winy_size
   asm("movl   46(%ebx), %edx");
   asm("movl   %ecx, (%eax)");
   
   asm("movl    %edx,%esi");
   asm("movl    %ecx,%edx");
   asm("movl    $-1,%ebx");
   asm("movl    $-1,%ecx");
   asm("movl    $67,%eax");
   asm("int   $0x40");
   free(pce);
   return;
}


Top
   
 Post subject:
PostPosted: Sun Oct 08, 2006 10:26 am 
Ghost
Не вижу большого смысла в фиче дефолтной установки результата в ноль. А вдруг результат формируется в ассемблерной вставке?
tcc поддерживает #pragma pack - переписал определение структуры с его использованием (попутно обнаружил, что я пропустил одно поле...).


Top
   
 Post subject:
PostPosted: Tue Feb 27, 2007 2:37 pm 
Offline

Joined: Thu Jan 25, 2007 4:45 pm
Posts: 135
Поделитесь пожалуйста файликом start.o


Top
   
 Post subject:
PostPosted: Wed Feb 28, 2007 8:59 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
Пожалуйста: http://diamondz.land.ru/start.o
А в чём, собственно, проблема с компиляцией? В папке start достаточно сказать "fasm start.asm".

_________________
Ушёл к умным, знающим и культурным людям.


Top
   
 Post subject:
PostPosted: Wed Apr 04, 2007 11:39 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Стал я прикручивать интерфейс к программе spektr, используя библиотеку libGUI.Сначала было всё нормально.Тоесть компиляция проходила успешно и код работал.Как только мне потребовалось приделать сложные GUI компоненты, такие как закладки, то возникла проблема.При создании закладки нужно передавать в структуру закладки указатели на дочерние контролы(GUI компоненты, которые будут на закладках).
Я делал всё правильно(соблюдал все типы данных).Но TinyC выдаёт сообщение об ошибке.Это сообщение типа ,-"невозможно приравнять указатель типа struc anonymus* указателю unsigned int * ".Я попробовал скомпилировать spektr.c в объектник при помощи GCC.Он всё нормально скомпилировал(небыло никаких сообщений об ошибках).По содержимому ассемблерного кода, скомпилированного GCC я понял, что всё в порядке(задуманное на C верно сгенерировано в assembler).Тогда решил скомпилировать всю программу spektr.c при помощи GCC.
Воспользоваться статьёй DIAMOND-а не получилось, так как у меня используются obj файлы собственного производства.
Тогда я решил скомпилировать так:

создаём объектники и собираем их в двоичный файл spektr
gcc -o ./spektr start.o k_lib.o ./spektr.c -nostdlib

превращаем двоичный файл в бинарник

objcopy ./spektr -O binary
у меня получился бинарный файл spektr, но это не был исполняемый файл Колибри.Я непонимаю, что я не так сделал ?

Пояснения.
start.o это модернизированный start.asm для использования нового менеджера памяти Колибри (в остальном код не изменён).
k_lib.o это библиотека формата ELF содержащая некоторые системные функции Колибри, котоые используются мной в программе.

Пожалуйста помогите советом - мне это очень нужно.


Top
   
 Post subject:
PostPosted: Thu Apr 05, 2007 9:44 am 
Offline

Joined: Thu Jan 25, 2007 4:45 pm
Posts: 135
Попробуй использовать void * вместо unsigned int *

А вообще у меня получилось писать на сишке для Kolibri только в Visual Studio 2005 (gcc не пробовал). Но и там была туева хуча проблем :(


Top
   
 Post subject:
PostPosted: Thu Apr 05, 2007 4:43 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
>Попробуй использовать void * вместо unsigned int *

В моём случае так делать нельзя.Потому что у меня структура - это тип данных.И если в одном из её полей организовать указатель типа void* , то компилятор не моймёт какого размера она должна быть(структура).
Тоесть имеется структура закладка, некоторые из полей которой являются указателями на другие структуры.К примеру структуры кнопки или чекбокса.GCC нормально понимает мой код, а TinyC нет.Помоему это связано с ошибкой в компиляторе.Тем более, что Халявин
Андрей(halyvin) уже находил некоторые ошибки.


Неужели на этом форуме нет людей умеющих компилировать код под Колибри при помощи GCC ?


Top
   
 Post subject:
PostPosted: Thu Apr 05, 2007 5:29 pm 
Offline

Joined: Mon May 01, 2006 10:12 pm
Posts: 349
melibc прекрасно компиляется с помощью gcc. И тестовые проги тоже


Top
   
 Post subject:
PostPosted: Thu Apr 05, 2007 5:43 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
>melibc прекрасно компиляется с помощью gcc. И тестовые проги тоже

У меня давно melibc установлена и тестовые программы тоже.
Хочет того программа или нет, но ко всем тестовым программам(и не только) линкуются функции из melibc.
При компиляции моей программы spektr происходит конфликт между функциями из melibc и функциями из k_lib.o
Это функции работы с памятью.
Также возникают проблемы с экспортируемыми __argv и __argc.Они содержаться в объектнике start, который формирует свой заголовок программы, что опять приводит к конфликту.
Поэтому мне нужен вариант сборки программы без использования melibc и без соответствующих скриптов для неё.


Top
   
 Post subject:
PostPosted: Thu Apr 05, 2007 6:03 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
andrew_programmer wrote:
превращаем двоичный файл в бинарник

objcopy ./spektr -O binary
у меня получился бинарный файл spektr, но это не был исполняемый файл Колибри.Я непонимаю, что я не так сделал ?

Линковщику надо передавать ключ -n. При раздельной компиляции и компоновке просто дополнительный аргумент у ld, при использовании только gcc вроде бы есть опция командной строки -Xlinker -n.


Top
   
 Post subject:
PostPosted: Fri Apr 06, 2007 10:58 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Всётаки разобрался я с компиляцией.
Оказаывается для компиляции нужно было простенький скриптик для линковщика написать.И ещё модернизировать start.asm, потомучто его вариант для TinyC был непригоден.Ну и как положено Makefile сделал.

Для сравнения.
Программа spektr скомпилированная TinyC имеет размер 23.5 килобайт.При компиляции GCC размер программы 17.5 килобайт.Оптимизация!
Причём как по размеру, так и по скорости.


Top
   
 Post subject:
PostPosted: Mon Jul 30, 2007 12:28 am 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Здравствуйте.

Ранее Халявин Андрей портировал компилятор TinyC для компиляции программ, написанных на C,
под KolibriOS. Но этот компилятор работает из виндовс или линукса, что создаёт неудобства при
разработке программ под Колибри.

Я окончательно портировал TinyC в KolibriOS.Тоесть теперь компилятор TinyC работает из
KolibriOS.

Давздравствует разработка программ на языке высокого уровня прямо из KolibriOS !
http://www.menuetosgame.narod.ru/programs/ktcc.7z

Все сообщения от компилятора выводятся в Console,что намного удобнее доски отладки.
Кстати, портированный компилятор я назвал KTCC(Kolibri Tiny C Compiler).

Для портирования компилятора я использовал библиотеку menuetlibc, которую я доработал
(добавил в библиотеку необходимые для компилятора функции).Исходники портированного KTCC
отличаются от исходников metcc.
http://www.menuetosgame.narod.ru/progra ... ibc_new.7z

Самая большая тестовая программа, которую я скомпилировал при помощи KTCC, -это моя
научная программа spektr.Я скомпилировал её из Колибри, а потом запустил. Программа
успешно работала.

Для компиляции программы необходимо запустить KTCC c параметрами.Пример параметров
вместе с простой тестовой программой содержится в папке example.Запуск компилятора
с параметрами производиться при помощи программы RUN(меню->запуск программ->RUN).
Мне хочется доработать программу CMD, чтобы она понимала относительный путь './'
и принимала cmd скрипты через параметры. Это позволит компилировать при помощи скриптов
даже сложные проекты(где много файлов в разных папках).
Пока что разобраться в коде CMD у меня не очень-то получается.Код не структурирован.
Непонятно, где начинаются и кончаются функции, а где идут просто метки переходов.


Top
   
 Post subject:
PostPosted: Mon Jul 30, 2007 7:55 am 
andrew_programmer
Хоть я и не пишу на С, но все равно - поздравляю! Удачи.


Top
   
 Post subject:
PostPosted: Mon Jul 30, 2007 8:04 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5067
andrew_programmer
Да, отличная работа, хоть мне больше по душе Паскаль. + Примеров бы побольше в архиве. :)


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 231 posts ]  Go to page Previous 14 5 6 7 816 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


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:  
Powered by phpBB® Forum Software © phpBB Limited