|
|
  |
Начальная инициализация статических переменных. |
|
|
|
Jul 12 2012, 09:05
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(kan35 @ Jul 12 2012, 10:11)  Почему бы тогда по вашей логиге банально не вызывать SystemInit в сомом main()? Потому что main - это уже пользовательское приложение. А ST пыталась сделать шаблон. Как раз для того, чтобы пользователю в main ничего не надо было писать. Цитата(kan35 @ Jul 12 2012, 10:11)  Инициализация на 16МГц и на 168МГц - чувствуете разницу? А при использовании GCC, по вашей "логиге", проц стартует сразу на 168МГц?  Я понимаю, что вы послушали "спецов" из ST, и прониклись. Но голову-то включать иногда надо?
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jul 12 2012, 19:42
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(kan35 @ Jul 12 2012, 17:45)  Вы сказали, что в GCC сначала происходит инициализация, а "SystemInit"после. Если это так, то это неправильно как раз. Производить инициализацию в 10 раз медленнее чем позволяет проц - не всегда позволительно. Суть в том, что в трёх вариантах из пяти сделано так. То есть, при наличии возможности выбрать, что делать сначала, инициализацию переменных или вызов SystemInit() (это gcc_ride7, TASKING и TrueSTUDIO) -- сначала идёт инициализация переменных. А в двух случаях, где этого выбора нет (keil и IAR) - сделали как смогли. И получилось, кстати, не по стандарту Си. (Но тут я не особо силён, и могу ошибаться.) Так что товарищ из ST, который вам это обосновывал - скорее всего "импровизировал"
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jul 13 2012, 11:50
|
Местный
  
Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315

|
Цитата А вы уверены что SystemInit делает то что вы написали? Да уверен. Я посмотрел исходник от ST из комплекта Keil (v4.23) для серии ST32F10X. Не особо вдаваясь в код, бегло просмотрел коментарии и сделал выводы. Насчет HSI поторопился немного. Сперва сбрасывается на внутренний генератор, затем выставляется системная частота в зависимости от дефайна. Цитата И получилось, кстати, не по стандарту Си. Поскольку стандарт описывает поведение программы, а не поведение железа, то предварительную (дефолтовую) ноастройку можно отнести как к подготовительным операциям (типа инициализации статических переменных), так и к исполнению пользовательского кода. Инженеры ST придерживаются первого варианта.
Сообщение отредактировал редактор - Jul 13 2012, 12:25
--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
|
|
|
|
|
Jul 14 2012, 21:06
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(ViKo @ Jul 14 2012, 21:07)  Напомню, что переменные могут располагаться и во внешней памяти. А встроенный контроллер к ней перед этим нужно еще инициализировать. Иначе - никак. Поэтому объяснение инженера из ST мне представляется верным. Поддерживаю kan35. А в случае с gcc_ride7, TASKING и TrueSTUDIO объяснения инженера из ST надо просто инвертировать?  Если честно, то не ожидал, что моё очевидное наблюдение вызовет столько возражений. Ещё раз: да, могут быть случаи, когда надо сначала инициализировать тактирование и/или внешнюю память, а уже потом - статические переменные. Но, (и это - соль моего наблюдения) программисты из ST совершенно не думали ни о чём таком. Если бы думали, то сделали бы во всех вариантах одинаковый порядок.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jul 15 2012, 05:20
|
Знающий
   
Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594

|
АНТОХА, действительно, разница в шаблонах имеется, сейчас я специально тоже посмотрел. И обратил внимание, что в TASKING сделано как в IAR и KEIL, хотя можно было сделать как в GCC, но не было сделано! Из всех тобою перечисленных только GCC (TRUEStudio и gcc_ride7 - одно и то же, даже sturtup у них практически копии). Итого пропорция складывается 3:1 не в твою пользу и не в пользу бесплатного средства. И, конечно остается вопрос, почему ST в варианте GCC сделали иной порядок, возможно для GCC пишут не те же программеры, что для коммерческих сред. Правдоподобно?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|