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

 
 
> Начальная инициализация статических переменных.
Вячик13
сообщение Jul 9 2012, 06:36
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 17-01-12
Пользователь №: 69 604



Среда - Keil Arm. Контроллер STM32F103.
В Keil имеется функция SystemInit(), которая выполняется перед main().

Описание эффекта.
В функции SystemInit() инициализируется несколько указателей-параметров объекта. При входе в функцию main() эти параметры обнуляются.

Вопрос.
Что это? Возможно начальная инициализация статических переменных происходит после выполнения SystemInit()? Не похоже. Какие-то "заморочки со стеком?" может я какую-то "галочку" в опциях проекта не поставил?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AHTOXA
сообщение Jul 14 2012, 21:06
Сообщение #2


фанат дивана
******

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



Цитата(ViKo @ Jul 14 2012, 21:07) *
Напомню, что переменные могут располагаться и во внешней памяти. А встроенный контроллер к ней перед этим нужно еще инициализировать. Иначе - никак.
Поэтому объяснение инженера из ST мне представляется верным. Поддерживаю kan35.

А в случае с gcc_ride7, TASKING и TrueSTUDIO объяснения инженера из ST надо просто инвертировать? sm.gif
Если честно, то не ожидал, что моё очевидное наблюдение вызовет столько возражений.
Ещё раз: да, могут быть случаи, когда надо сначала инициализировать тактирование и/или внешнюю память, а уже потом - статические переменные. Но, (и это - соль моего наблюдения) программисты из ST совершенно не думали ни о чём таком. Если бы думали, то сделали бы во всех вариантах одинаковый порядок.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 15 2012, 18:13
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(AHTOXA @ Jul 15 2012, 00:06) *
да, могут быть случаи, когда надо сначала инициализировать тактирование и/или внешнюю память, а уже потом - статические переменные.

Почему "могут быть"?
Разве такая последовательность ( 1. инициализация тактирование, 2. инициализация внешней памятиб если она есть 3. инициализация переменых) не наиболее логична? Просто обычно не критично на какой тактовой она выполнится.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 15 2012, 19:58
Сообщение #4


фанат дивана
******

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



Потому что при вызове сишной функции SystemInit() мы должны обеспечить инициализированные статические переменные и обнулённые неинициализированные. Это вроде как по стандарту языка Си.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Вячик13   Начальная инициализация статических переменных.   Jul 9 2012, 06:36
- - ViKo   Цитата(Вячик13 @ Jul 9 2012, 09:36) В фун...   Jul 9 2012, 06:49
|- - Вячик13   Цитата(ViKo @ Jul 9 2012, 09:49) Например...   Jul 9 2012, 07:09
- - ViKo   Смотрите, что есть в startup. КодReset_Handler PRO...   Jul 9 2012, 07:30
|- - Вячик13   Цитата(ViKo @ Jul 9 2012, 10:30) Смотрите...   Jul 9 2012, 07:36
|- - ViKo   Цитата(Вячик13 @ Jul 9 2012, 10:36) По-мо...   Jul 9 2012, 07:50
|- - Вячик13   Цитата(ViKo @ Jul 9 2012, 10:50) И это пр...   Jul 9 2012, 08:05
|- - ViKo   Цитата(Вячик13 @ Jul 9 2012, 11:05) Не по...   Jul 9 2012, 08:11
|- - Вячик13   Цитата(ViKo @ Jul 9 2012, 11:11) где же m...   Jul 9 2012, 08:20
- - kan35   в 20х числах июня, Томас Дреслер из ST совместно с...   Jul 10 2012, 10:16
|- - Вячик13   Цитата(kan35 @ Jul 10 2012, 13:16) в 20х ...   Jul 11 2012, 04:58
|- - ViKo   Цитата(kan35 @ Jul 10 2012, 13:16) В том ...   Jul 11 2012, 05:19
- - kan35   SystemInit или собственно говоря установка частоты...   Jul 11 2012, 06:01
|- - AHTOXA   А по-моему, всё гораздо проще. SystemInit - это о...   Jul 11 2012, 21:10
|- - kan35   Цитата(AHTOXA @ Jul 12 2012, 01:10) А по-...   Jul 12 2012, 04:11
|- - AHTOXA   Цитата(kan35 @ Jul 12 2012, 10:11) Почему...   Jul 12 2012, 09:05
- - kan35   Вы сказали, что в GCC сначала происходит инициализ...   Jul 12 2012, 11:45
|- - AHTOXA   Цитата(kan35 @ Jul 12 2012, 17:45) Вы ска...   Jul 12 2012, 19:42
- - редактор   SystemInit() от STM приводит контроллер в исходное...   Jul 12 2012, 12:19
|- - kan35   Цитата(редактор @ Jul 12 2012, 16:19) Sys...   Jul 12 2012, 13:17
- - kan35   Ну и отвлекаясь от обсуждения квалификации инженер...   Jul 13 2012, 05:58
|- - AHTOXA   То есть, по поводу квалификации инженера из ST у н...   Jul 13 2012, 08:08
- - редактор   ЦитатаА вы уверены что SystemInit делает то что вы...   Jul 13 2012, 11:50
- - ViKo   Напомню, что переменные могут располагаться и во в...   Jul 14 2012, 15:07
- - kan35   АНТОХА, действительно, разница в шаблонах имеется,...   Jul 15 2012, 05:20
|- - AHTOXA   Да, точно, с TASKING-ом я был невнимателен. Тогда ...   Jul 15 2012, 06:15
- - редактор   Если бы сишная функция была включена в стартап в в...   Jul 16 2012, 05:34
- - ViKo   Все, что делается до main, принадлежит операционно...   Jul 16 2012, 07:59
- - AHTOXA   Цитата(ViKo @ Jul 16 2012, 13:59) Все, чт...   Jul 16 2012, 09:55
- - ViKo   Цитата(AHTOXA @ Jul 16 2012, 12:55) Язык ...   Jul 16 2012, 10:50
- - AHTOXA   Если SystemInit написать на ассемблере, то не набл...   Jul 16 2012, 12:18


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

 


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


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