реклама на сайте
подробности

 
 
> Функция main как метод класса, можно?
InsolentS
сообщение Feb 13 2008, 22:20
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



хочу сделать функцию main методом класса, например
Код
class Program
{
  private:
    Program(){};
    static int main(void);
};

Program program;

int Program::main(void)
{
  while(1);
}
...

но проблема в том, что не знаю как обратится к такой функции из ассемблера, т.е. на что заменить строки startup файла
Код
; Enter the C code

                IMPORT  __main
                LDR     R0, =__main
                BX      R0

?


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Feb 14 2008, 18:29
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



__main - это не пользовательский main, а библиотечная функция.
Go to the top of the page
 
+Quote Post
InsolentS
сообщение Feb 14 2008, 22:52
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



Цитата(aaarrr @ Feb 15 2008, 00:29) *
__main - это не пользовательский main, а библиотечная функция.

Как её тогда перегрузить?


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
tag
сообщение Feb 15 2008, 07:43
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 21-02-06
Пользователь №: 14 561



Цитата(InsolentS @ Feb 15 2008, 01:52) *
Как её тогда перегрузить?

...main это не библиотечная функция и перегрузить ее нельзя. Более того она не отделима от программы на C, т.е должна существовать обязательно иначе компилятор на этапе линковки выдаст ошибку. Можно поменять так называемую точку входа (например MS Visual C это позволяет, впрочем и IAR for ARM тоже). Точка входа это тот адрес по которому передается управление приложению операционной системой по завершению создания образа приложения (если говорить про операционные системы) или адрес с которого стартует программа (если это программа для микроконтроллера и не используется ОС). Точкой входа может быть любая метка. Точка входа задается в линковщике.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 15 2008, 08:54
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(tag @ Feb 15 2008, 10:43) *
...main это не библиотечная функция и перегрузить ее нельзя.

__main в Keil'е (речь о нем, как я понимаю) это именно что библиотечная функция, занимающаяся подготовкой окружения и передающая управление пользовательскому main.

Цитата(tag @ Feb 15 2008, 10:43) *
Более того она не отделима от программы на C, т.е должна существовать обязательно иначе компилятор на этапе линковки выдаст ошибку.

Вполне отделима - достаточно сказать линкеру, что стандартные библиотеки не используются.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 16:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016