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

 
 
4 страниц V  < 1 2 3 4 >  
Closed TopicStart new topic
> Язык С, ARM - простые вопросы
Dog Pawlowa
сообщение Jan 26 2009, 10:45
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Demeny @ Jan 26 2009, 12:58) *
Попробую ещё раз пояснить ...

Этап системного проектирования, постановки задачи и разбиения задачи на подзадачи вообще-то присутствует?
Вот и выбирается на этом этапе все, включая способы взаимодействия, ресурсы, особенности.
В общем случае "глобальность против локальности" не имеет решения. Та же "реентерабельность". Почему printf не реентерабельный, не задумывались? Почему разработчики компиляторов не хотят осчастливить страждущих?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 26 2009, 11:13
Сообщение #32


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Dog Pawlowa @ Jan 26 2009, 13:45) *
В общем случае "глобальность против локальности" не имеет решения. Та же "реентерабельность".

Есть костыли - работать с указателем на структуру, содержащую "локальные" параметры функции, являющейся де-юре нереентерабельной. Если шаловливые ручки добираются до таких решений, то что это? (Что такое хорошо и что такое плохо?)
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jan 26 2009, 14:20
Сообщение #33


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(zltigo @ Jan 26 2009, 05:32) *
Статически-то зачем? Спросили сколько надо у менеджера памяти. А вот стек, который потребуется Вам для Вашего непрогнозируемого количества "UART-ов" Вы как раз скорее всего статически-то и выделите. 

 


Товарищи капиталисты, по-моему вы путаете теплое с мягким.

Глобальное - то, что видно отовсюду и всегда живет (возможно спорно),
Локальное - определено и живет в пределах обьекта к которому принадлежит.
Пример - переменные обьявленные внутри функции - локальные для етой функции (
совсем не обязательно они должны быть на стеке),
переменные обьявленные внутри класс/структуры - локальны для етих
классов/структур и глобально (без структуры/класса) - невидимы.
Могут размещатся в хипе, от етого глобальными не становятся.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 26 2009, 14:49
Сообщение #34


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(A. Fig Lee @ Jan 26 2009, 18:20) *
Товарищи капиталисты, по-моему вы путаете теплое с мягким.
Глобальное - то, что видно отовсюду и всегда живет (возможно спорно),

Статическое - это то, что видно только там, где надо, и всегда живет. Не путайте мертвое  с пьяным smile.gif
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jan 26 2009, 15:10
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(_Pasha @ Jan 26 2009, 14:13) *
Есть костыли - работать с указателем на структуру, содержащую "локальные" параметры функции, являющейся де-юре нереентерабельной.

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


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 26 2009, 15:22
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(A. Fig Lee @ Jan 26 2009, 17:20) *
Товарищи капиталисты, по-моему вы путаете теплое с мягким.



Это у Вас каша sad.gif из глобальности и области видимости, на что я уже сразу указывал.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 26 2009, 15:23
Сообщение #37


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Dog Pawlowa @ Jan 26 2009, 18:10) *
 адреса параметров нужно вычислять по указателю на структуру.

Вообще-то нет, если используется доступ к локальным переменным через [регистр базы + смещение]. Один раз добрались до адреса- и все.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 26 2009, 15:25
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(_Pasha @ Jan 26 2009, 18:23) *
Один раз добрались до адреса- и все.


Угу! Удобно. Экономия при наличии у контроллера нужных режимов адресации в чистом виде.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jan 26 2009, 17:55
Сообщение #39


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(_Pasha @ Jan 26 2009, 09:49) *
Статическое - это то, что видно только там, где надо, и всегда живет. Не путайте мертвое  с пьяным smile.gif



смотря о каких языках говорил - C или C++?

2. живет не всегда. например, обьявленная внутри функции - с момента обращения к функции.


Цитата(zltigo @ Jan 26 2009, 10:22) *
Это у Вас каша sad.gif из глобальности и области видимости, на что я уже сразу указывал.


видимость переменной может быть и глобальной, но она являтся локальной -
обьявить паблик мембер - член класса


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 26 2009, 18:33
Сообщение #40


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(A. Fig Lee @ Jan 26 2009, 21:55) *
2. живет не всегда. например, обьявленная внутри функции - с момента обращения к функции.

Присмотритесь повнимательнее:  статические переменные живут изначально благодаря статической компиляции. И инициализация их (значением) производится в теле стартапа Поскольку это самое недорогое и здравое решение проблемы - позволить компилятору решить, где расположить переменную, оно применяется чаще всего.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 26 2009, 19:45
Сообщение #41


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(A. Fig Lee @ Jan 26 2009, 20:55) *
2. живет не всегда. например, обьявленная внутри функции - с момента обращения к функции.
Живет она как раз всегда, а вот увидеть ее мы можем другой функцией
только после обращения к фунцкии в которой она определена(а можем и не увидеть если не захотим...).

Вот с вашей точки зрения в таком коде:
Код
void someFunc()
{
  static unsigned char ch;
  ................
}

переменная ch глобальная или локальная ?


Разница между глобальными и локальными ИМХО, заключается в том что к глобальной(если захочу), могу обратиться
из любой другой функции, а вот к локальной только из функции в которой она создана.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 26 2009, 20:17
Сообщение #42


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(_Pasha @ Jan 26 2009, 22:33) *
статические переменные живут изначально благодаря статической компиляции. И инициализация их (значением) производится в теле стартапа

А если статическая переменная локальная? Разве её инициализация будет производиться в стартапе?
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 26 2009, 20:27
Сообщение #43


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(sonycman @ Jan 26 2009, 23:17) *
А если статическая переменная локальная? Разве её инициализация будет производиться в стартапе?
Переменная из моего предыдущего поста статическая и объявлена в теле функции,
ее инициализация будет проведена в стартапе.



Более того(если захотеть), менять ее можно будет и из другой функции.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 26 2009, 20:40
Сообщение #44


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(singlskv @ Jan 27 2009, 01:27) *
Более того(если захотеть), менять ее можно будет и из другой функции.
Я извиняюсь, что вмешиваюсь. Работать с этой переменной в другой функции можно будет только по указателю, который данная функция должна сообщить другой, но не по символическому имени переменной.
Я тут некоторое время назад пояснял одному (точнее одной smile.gif ) пользователю о типах переменных. Может интересно будет.
Go to the top of the page
 
+Quote Post
sonycman
сообщение Jan 26 2009, 21:07
Сообщение #45


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Цитата(singlskv @ Jan 27 2009, 00:27) *
Переменная из моего предыдущего поста статическая и объявлена в теле функции,
ее инициализация будет проведена в стартапе.

А мне тут недавно говорили, что статические локальные переменные инициализируются при первом заходе в содержащую их функцию.
И совершенно не в стартапе.
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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