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

 
 
> Зачем нужны *.mac и csturtup.s файлы, Обьясните пожалуйста!!!
bureau
сообщение Dec 29 2008, 21:27
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 625
Регистрация: 22-02-07
Пользователь №: 25 593



В IARe при отладке сначала код грузится с этих файлов. Собственно говоря что это дает?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rvk
сообщение Jan 9 2009, 08:58
Сообщение #2


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

Группа: Свой
Сообщений: 165
Регистрация: 13-05-06
Из: Камышин
Пользователь №: 17 067



В чем смысл закладывать все в startup.s, если он запускается до main.
По другому поставлю вопрос. Какая разница, проинициализирована периферия в startup.s файле или в main.c

Сообщение отредактировал rvk - Jan 9 2009, 09:41
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 9 2009, 10:00
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(rvk @ Jan 9 2009, 10:58) *
По другому поставлю вопрос. Какая разница, проинициализирована периферия в startup.s файле или в main.c
Бывает, что без этого вообще никак. Типичный пример - msp430. У него собака включена после сброса и настроена на 32768 тактов генератора. Если в программе много переменных, то в процессе их инициализации стартапом собака сработает. Приходится ее  затыкать  перед инициализацией.

Еще один случай - загрузчик. Сразу после старта процессор разгоняется, быстро происходят нужные проверки и если все хорошо - управление сразу передается на точку старта приложения. До инициализации переменных загрузчика или, тем более, main() загрузчика управление в таких случаях не доходит вообще.

Цитата(rvk @ Jan 9 2009, 11:50) *
Ведь если startup.s хоть как то причастен к процедуре инициализации классов пользователя,
Да, причастен. Именно оттуда и вызываются конструкторы статических объектов.
Цитата(rvk @ Jan 9 2009, 11:50) *
тогда получается совершенно тяжелая ситуация, мало написать программу на C++, так еще потом вручную редактировать откомпилированный файл.
Зачем? Компилятор складывает указатели на вызовы конструкторов в отдельный сегмент, линкер собирает их в таблицу, стартап проходит по таблице и тупо вызывает функции по указателю пока не наткнется на 0. Все. Более того, все это уже скомпилировано и лежит в библиотеке. Поэтому самый простой ответ - пока вы не знаете, зачем нужен startup.s - он вам не нужен. Готовый библиотечный подлинкуется автоматически.

P.S. Все почему-то пишут про cstartup.s, но никто не сказал ни слова про .mac
bureau: гляньте на вот такой пример его содержимого, возможно вам все станет ясно:
CODE

execUserPreload()
{
Reset();
Remap_FLASH();
__writeMemory32(0xD3,0x98,"Register"); // CPSR = SVC mode, ARM, IRQ, FIQ disabled
}

execUserReset()
{
Reset();

Remap_FLASH();

__writeMemory32(0xD3,0x98,"Register"); // CPSR = SVC mode, ARM, IRQ, FIQ disabled
__writeMemory32(0x00000000,0xB4,"Register");
}

__var tmp;
Remap_FLASH()
{
tmp = __readMemory32(0x00200000, "Memory"); // read from RAM area
__writeMemory32(~tmp, 0x00200000, "Memory"); // alter RAM area
if( ~tmp == __readMemory32(0x00000000, "Memory") ) // check if altering mirrored to remap area
{
__writeMemory32(0x00000001, 0xFFFFFF00,"Memory");
}
__writeMemory32(tmp, 0x00200000 ,"Memory"); // restore RAM data
__message " remap " ;
}


Reset()
{
__writeMemory32(0xA5000004, 0xFFFFFD00, "Memory"); // reset the peripherals
if( __driverType("jlink") )
{
__sleep(1000000); // wait
__emulatorSpeed(32000); // set JTAG speed ~ slow clock
}
__writeMemory32(0x00000001, 0xFFFFFC20,"Memory"); // OSC enable, no timeout

while (! (__readMemory32(0xFFFFFC68, "Memory") & (1 << 0)) ); // wait until MOSCS

// Assuming 18.432 MHz osc
__writeMemory32(0x00190605, 0xFFFFFC2C,"Memory"); // *26/5 set LOCK after 6 SCLK

__writeMemory32(0x00000004, 0xFFFFFC30,"Memory"); // PRES = 2
while (! (__readMemory32(0xFFFFFC68, "Memory") & (1 << 3)) ); // wait untli MCKRDY

__writeMemory32(0x00000007, 0xFFFFFC30,"Memory"); // MCK = PLLCK / 2
while (! (__readMemory32(0xFFFFFC68, "Memory") & (1 << 3)) ); // wait untli MCKRDY

if( __driverType("jlink") )
{
__emulatorSpeed(0); // auto-detect new JTAG speed
__sleep(1000000); // wait
}
__message " MCK ready " ;
}


Сообщение отредактировал Сергей Борщ - Jan 9 2009, 10:10


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- bureau   Зачем нужны *.mac и csturtup.s файлы   Dec 29 2008, 21:27
- - sergeeff   Наверное все-таки из cstartup.s. Идея проста - вып...   Dec 30 2008, 00:36
|- - bureau   А болие подробней описание каким образом организов...   Jan 2 2009, 19:37
|- - HARMHARM   Цитата(bureau @ Jan 2 2009, 21:37) А боли...   Jan 2 2009, 19:57
- - uriy   Обычно с компилятором бывают дефолтовые стартап фа...   Jan 8 2009, 16:07
- - rvk   Цитата(bureau @ Dec 30 2008, 00:27) В IAR...   Jan 8 2009, 17:28
- - sergeeff   До поры до времени можно и не обращать, пока ваша ...   Jan 8 2009, 18:09
|- - rvk   Цитата(sergeeff @ Jan 8 2009, 21:09) До п...   Jan 8 2009, 20:42
- - sergeeff   Речь идет, к примеру, о размерах стеков для вашей ...   Jan 8 2009, 21:48
- - rvk   Да стек важная штука, и если его не хватит, мало н...   Jan 9 2009, 04:37
- - sergeeff   Вы задаете вопросы безотносительно какого-то конкр...   Jan 9 2009, 07:18
- - ek74   Цитата(rvk @ Jan 9 2009, 11:58) По другом...   Jan 9 2009, 09:36
|- - rvk   Цитата(ek74 @ Jan 9 2009, 12:36) А если В...   Jan 9 2009, 09:50


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

 


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


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