Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вт ноя 20, 2018 4:49 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 231 сообщение ]  На страницу Пред. 14 5 6 7 816 След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вс сен 24, 2006 11:18 am 
Не в сети

Зарегистрирован: Пн апр 10, 2006 7:22 am
Сообщения: 76
А есть что либо для SVN весящее поменьше, желательно менее 1 МБ?


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 07, 2006 9:05 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пн мар 20, 2006 10:44 am
Сообщения: 557
Вот ещё две интересные особенности :
1) Функция такого вода скомпилируется без проблем, но возвращает неопределённо значение, а вовсе не 0 как многие другие компилеры.
Код:
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 а совсем другое, и пользоватся структурои невозможно.
Писать полную реализацию мне некогда/незачем, для себя использовал такой код :
Код:
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;
}


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


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Вт фев 27, 2007 2:37 pm 
Не в сети

Зарегистрирован: Чт янв 25, 2007 4:45 pm
Сообщения: 135
Поделитесь пожалуйста файликом start.o


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Ср фев 28, 2007 8:59 pm 
Не в сети
Kernel Developer
Аватара пользователя

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

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


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 04, 2007 11:39 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 19, 2005 4:43 pm
Сообщения: 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 содержащая некоторые системные функции Колибри, котоые используются мной в программе.

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


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Чт апр 05, 2007 9:44 am 
Не в сети

Зарегистрирован: Чт янв 25, 2007 4:45 pm
Сообщения: 135
Попробуй использовать void * вместо unsigned int *

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


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Чт апр 05, 2007 4:43 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 19, 2005 4:43 pm
Сообщения: 896
>Попробуй использовать void * вместо unsigned int *

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


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


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Чт апр 05, 2007 5:29 pm 
Не в сети

Зарегистрирован: Пн май 01, 2006 10:12 pm
Сообщения: 349
melibc прекрасно компиляется с помощью gcc. И тестовые проги тоже


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Чт апр 05, 2007 5:43 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 19, 2005 4:43 pm
Сообщения: 896
>melibc прекрасно компиляется с помощью gcc. И тестовые проги тоже

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


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Чт апр 05, 2007 6:03 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пн ноя 28, 2005 8:00 pm
Сообщения: 1601
andrew_programmer писал(а):
превращаем двоичный файл в бинарник

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

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


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пт апр 06, 2007 10:58 pm 
Не в сети
Аватара пользователя

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

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


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 30, 2007 12:28 am 
Не в сети
Аватара пользователя

Зарегистрирован: Чт май 19, 2005 4:43 pm
Сообщения: 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 у меня не очень-то получается.Код не структурирован.
Непонятно, где начинаются и кончаются функции, а где идут просто метки переходов.


Вернуться к началу
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 30, 2007 7:55 am 
andrew_programmer
Хоть я и не пишу на С, но все равно - поздравляю! Удачи.


Вернуться к началу
   
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 30, 2007 8:04 am 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4879
andrew_programmer
Да, отличная работа, хоть мне больше по душе Паскаль. + Примеров бы побольше в архиве. :)


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 231 сообщение ]  На страницу Пред. 14 5 6 7 816 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB