Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: lowlevel_init
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
shu123
Цитата(buddazvon @ Aug 24 2009, 17:31) *
Есть безосьный элементраный мигатель светодиодами на SAM7S64. Писаный на С. Работающий.
Подключаю С++, и линкер вдруг перестает обнаруживать lowlevel_init. Чес гря, я и не полнимал, кто его раньше вызывал, и каким образом соотвтествует С стандарту.


IAR "умный" и для "облегчения жизни разработчикам" добавляет собственные хуки и некий инициализирующий код который эти хуки вызывает.

lowlevel_init - один из таких хуков

те можно описать свою функцию под таким именем и она автоматически позавется
перед мэйном

он там собака много чего неявного делает перед стартом мэйна, и отключить все это похоже нельзя.
иногда это вредно, я уже раз нарвался

в результате на 51 пришлось писать на ассемблере, учитывая убогость системы комманд развлечение состоялось smile.gif

учитывая что с/с++ имеют немного разные способы внутреннего именования, проблемы возможны
функа описана в доках - compiler refs

/Shu
zltigo
Цитата(shu123 @ Aug 29 2009, 19:19) *
он там собака много чего неявного делает перед стартом мэйна, и отключить все это похоже нельзя.

Вообще-то от ровным делом ничего не делает и более того, в нем можно кое-что и запретить. Все это Вы узнаете,если ознакомитесь с "исходником" smile.gif
Код
#ifdef __cplusplus
extern "C" {
#endif

#pragma language=extended

__interwork int __low_level_init(void);

__interwork int __low_level_init(void)
{
  /*==================================*/
  /*  Initialize hardware.            */
  /*==================================*/

  /*==================================*/
  /* Choose if segment initialization */
  /* should be done or not.           */
  /* Return: 0 to omit seg_init       */
  /*         1 to run seg_init        */
  /*==================================*/
  return 1;
}

#pragma language=default

#ifdef __cplusplus
}
#endif


Цитата(shu123 @ Aug 29 2009, 19:19) *
в результате на 51 пришлось писать на ассемблере...

однако, просто следовало ознакомиться с документацией и тем, как устроен startup код. А рассказывать байки на этом форуме, пожалуйста,не надо.
shu123
Цитата(zltigo @ Aug 29 2009, 20:32) *
Вообще-то от ровным делом ничего не делает и более того, в нем можно кое-что и запретить. Все это Вы узнаете,если ознакомитесь с "исходником" smile.gif


я для 51-го с этим бодался, там он много чего делает
хохма в том, что програмка замечательно работает под всеми возможными симуляторами но не работает на реальном железе (атмеловский 51-й)

При применении грубого хака в види ручной правки данного стартапного кода для перехода сразу на мой мэйн на железе работать начинает
что-то там не так....

поскольку задачка у меня была простая, я разбираться поленился и закодал все на ассемблере матерясь через каждые пол строчки smile.gif
но перед этим инициализирующий код таки глянул, ох много всего
возможно только для 51-го такой бедлам

основная часть проекта у меня Mega128 пишу на с++ все хорошо



Цитата(zltigo @ Aug 29 2009, 20:32) *
однако, просто следовало ознакомиться с документацией и тем, как устроен startup код. А рассказывать байки на этом форуме, пожалуйста,не надо.


могу прислать оригинальный код в личку, он очень простой, и буду сильно благодарен если вы мне скажите что я сделал не так
еще раз подчеркиваю, на симуляторах все ок, на реальном железе не работает


Цитата(zltigo @ Aug 29 2009, 20:32) *
ююю
.....
__interwork int __low_level_init(void)
......
однако, просто следовало ознакомиться с документацией и тем, как устроен startup код. А рассказывать байки на этом форуме, пожалуйста,не надо.


с документацией само собой ознакомился...
и не только с документацией, но и с конкретной реализацией данного стартапного кода

то что вами приведено в качестве стартапного кода таковым не является
это всего-лишь описание того самого low level init
точнее его дефолтной болванки

там есть еще стартапный код который все это зовет
и в частности обрабатывает результат возвращаемый low level init (0/1) для того что бы либо заниматься инициализацией сегментов либо нет

а с 51-м там правда проблема какая-то, я надеюсь мне больше не придется 51-й програмить так что не важно по сути smile.gif
zltigo
Цитата(shu123 @ Aug 29 2009, 19:41) *
я для 51-го с этим бодался, там он много чего делает

Слушаю Вас внимательно, что имено он делает. Вот прямиком default из 51:
CODE

#ifdef __cplusplus
extern "C" {
#endif

#pragma language=extended

//
// Locate low_level_init in the CSTART module
//
#pragma location="CSTART"
//
// If the code model is banked, low_level_init must be declared
// __near_func elsa a ?BRET is performed
//
#if (__CODE_MODEL__ == 2)
__near_func __root char
#else
__root char
#endif
__low_level_init(void)
{
/*==================================*/
/* Initialize hardware. */
/*==================================*/

/*==================================*/
/* Choose if segment initialization */
/* should be done or not. */
/* Return: 0 to omit seg_init */
/* 1 to run seg_init */
/*==================================*/
return (1);
}

Цитата
могу прислать оригинальный код в личку....

Не надо - это Ваши проблемы, чего Вы там наворотили под "эмулятор".

Цитата(shu123 @ Aug 29 2009, 19:49) *
то что вами приведено в качестве стартапного кода таковым не является

Вы говорите неправду я не говорил, это startup - это конкретно тот самы lowlevel_init() о котором Вы не далее, как полчаса назад соизволили написать следующее:
Цитата
lowlevel_init - один из таких хуков
те можно описать свою функцию под таким именем и она автоматически позавется
перед мэйном
он там собака много чего неявного делает перед стартом мэйна,

И не надо теперь наводить тень на плетень.
P.S.
startup.s точно так-же в исходниках и может быть отредактирован.
shu123
Цитата(zltigo @ Aug 29 2009, 20:32) *
однако, просто следовало ознакомиться с документацией и тем, как устроен startup код. А рассказывать байки на этом форуме, пожалуйста,не надо.


Была бы байка, не рассказывал бы.... не охотничий форум вроде...

Есть реальная ситуация проверенная на практике

Мне ваш подход не очень понятен...

Если у товарища есть проблема значит товарищ просто не ознакомился с доками?
Не провел энное количество экспериментов?
Не разобрал откуда именно и как именно возникает этот загадочный и мне лично не нужный стартапный код?
Который еще и выключить нельзя?

Вы так по определению считаете?

А просто наличие проблемы вы не предполагаете?
Я легко допускаю что это я где-то накосячил, но специально для этого был накатан тест который тупо зажигает лампочку
Так вот, на железе он ее зажигает только в том случае, если ручками убить весь этот стартап
На симуляторах работает безубойно

Не наводит на подозрения?





Цитата(zltigo @ Aug 29 2009, 20:58) *
Слушаю Вас внимательно, что имено он делает. Вот прямиком default из 51:


ну похоже кто-то из нас здесь явно развлекается, допускаю что оба smile.gif
дискуссия смысла не имеет поскольку мы явно понимаем о чем говорит оппонент, но вот желаем докапаться к словам smile.gif

дискуссию явно в корзину, поскольку информации почти не содержит

тем не менее вопрос
он не очень лично для меня критичен поскольку с 51-м я надеюсь больше не столкнусь

но может быть полезен для других

имею глюк, простейшая сишная прога не работает на реальном 51-м из за (берусь утверждать) именно кода стартапа
причем какого-то особого криминала в этом коде я лично не вижу
но тем не менее факт налици, при его отключении - работает

были похожие проблемы?
shu123
Цитата(zltigo @ Aug 29 2009, 20:58) *
Вы говорите неправду я не говорил, это startup - это конкретно тот самы lowlevel_init() о котором Вы не далее, как полчаса назад соизволили написать следующее:


я говорю правду smile.gif приведенный Вами код стартапом не является? верно ведь? верно
именно это я и утверждал

а мы говорили однако про стартап код, который похоже иногда по не совсем мне понятным причинам не того...
zltigo
Цитата(shu123 @ Aug 29 2009, 21:18) *
я говорю правду smile.gif приведенный Вами код стартапом не является? верно ведь? верно
именно это я и утверждал
а мы говорили однако про стартап код, который похоже иногда по не совсем мне понятным причинам не того...

О чем Вы несли чисто конкретную ахинею про lowlevel_init() в IAR каждый может прочитать несколькими постами выше. На что я конкретно и указал. Точка.

Moderator:
Продолжать засорять форум флеймом настоятельно не рекомендую.
shu123
Цитата(zltigo @ Aug 29 2009, 21:39) *
О чем Вы несли чисто конкретную ахинею про lowlevel_init() в IAR каждый может прочитать несколькими постами выше. На что я конкретно и указал. Точка.

Moderator:
Продолжать засорять форум флеймом настоятельно не рекомендую.


позволю себе таки составить резюме проблемы (флейм правда лишний, тема того не стоит)
на этом эту немного бредовую дискуссию предлагаю закончить

Я отвечал на вопрос откуда взялся low level init которого никто не звал. Вроде ответил. zltigo внес полезные дополнения к ответу.
Все остальное лирика и удовлетворение собственных амбиций

модератор: по моему личному мнению вся эта дискуссия в основном к удалению за отсутствием полезной информации. К тому-же не имеет отношения к scmRTOS

///////////// под катом

Уточняю, это для IAR для 51.

Для avr не смотрел но подозреваю ситуация та-же.
Просто для avr все работает и так и нет резонов копать, для 51 лично в моем случае - не работает

1. Стартапный код есть (факт, проверяно)
2. Он много чего делает (тоже факт)
3. В частности он вызывает low lеvеl init (о котором изначально и был вопрос на который я своим первым постом и ответил)
4. Что дефолтный low level init ничего не делает я и сам знаю, но спасибо что вы мне это наглядно показали
5. (не настаиваю) кажется есть проблема именно в этом стартапном коде для 51. Удаление ручками стартапа проблему на железе решило
6. На всяких там симуляторах оба варианта работают замечательно
7. Если вы отказываетесь посмотреть тестовый код в одну строчку и ткнуть меня мордой в ошибку в этой строчке, ну это конечное ваше право smile.gif
8. Я понимаю что 51 сейчас наверное не очень интересен но мне вот довелось нарваться... sad.gif

/////////////////

Чтоб не быть совсем голословным позволю себе привести ту единственную строчку в мэйне из которой состоит тестовая програмка
сорри, две строчки

{
P1 = 0x55; // контроллер совершенно тупой, управляет массивом LED
for(;;){}
}

я правда здесь где-то сильно накололся? smile.gif

И *вот это* ухитряется не работать на железе. В симуляторе все ок. Лампочки зажигаются
Контроллер AT89C4051 (51-й от atmel)

Что хуже всего, при убивани стартапной последовательности ручками (и проверке в дебагере что правдо убилась) оно на железе работает.... Честно светит лампочки через одну

Если честно, я немного удивлен

/Shu
Сергей Борщ
Цитата(shu123 @ Aug 29 2009, 22:25) *
Чтоб не быть совсем голословным позволю себе привести ту единственную строчку в мэйне из которой состоит тестовая програмка
сорри, две строчки

{
P1 = 0x55; // контроллер совершенно тупой, управляет массивом LED
for(;;){}
}

я правда здесь где-то сильно накололся? smile.gif
Предлягаю модераторам отрезать это обсуждение в отдельную ветку. Вы могли наколоться в файле линкера, разместив стек за пределами реального ОЗУ. Стартап вызывает функции и возвращается из них. В этом коде у вас обращений к стеку нет, весьма вероятно поэтому он и работает. Проверить это можно в симуляторе. Было бы интересно узнать у вас результаты этой проверки. Убрав стартап вы сделали невозможным исполнение любой более сложной программы. Ознакомившись с описанием стартапа вы поймете, что он есть необходимая и нисколько не страшная часть программы.

P.S. На этом форуме не любят высказываний "стартап кривой", "компилятор глючит" и т.п. Потому что в 99.9% случаев после опубликования кода кривым оказывается код, а глючит программист из-за недостатка знаний.
zltigo
Цитата(Сергей Борщ @ Aug 30 2009, 01:09) *
Предлягаю...

Moderator:
Разделил.
DpInRock
Цитата
И *вот это* ухитряется не работать на железе.

IAR вам предлагает стартап. Если вы не понимаете, чт он делает - просто не используйте. Все очень просто.

IAR - это просто инструмент. Которым работает человек. В Вашем же случае - инструмент - вы.
IgorKossak
Цитата(DpInRock @ Sep 3 2009, 22:53) *
IAR вам предлагает стартап. Если вы не понимаете, чт он делает - просто не используйте. Все очень просто.

Такой подход (неиспользование стартапа) как раз и порождает проблемы.
Я бы в данном случае сказал - "Если не понимаете, ничего не трогайте, используйте как есть, по умолчанию, т. е. библиотечный вариант".
Ибо если на взгляд топикстартера стартап делает чего-то много, это не значит, что оно лишнее.

Цитата(shu123 @ Aug 29 2009, 19:49) *
поскольку задачка у меня была простая, я разбираться поленился ...

Вот в этом всё и дело. Разбираться поленился. О том, что такое отладка, наверное и не подозревал.
Скоропалительный вывод - стартап плохой.
Простой совет, выкиньте все свои всевозможные симуляторы и начинайте разбираться с железом, а потом и с программой.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.