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

 
 
 
Reply to this topicStart new topic
> Указатели на функции
Twen
сообщение Nov 29 2010, 20:40
Сообщение #1


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

Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543



Добрый день уважаемые!
У меня сложилась такая ситуация, жил я себе спокойно, программировал 8 битные авр МК, потом перешёл на МСП и стал разбираться с ИАРом и углубляться в язык С, до недавно я на любительском уровне, что-то делал, паял...но захотелось выжимать максимум из языка С и ИАра, изучить их по детальнее...так вот начал я с языка С, узнал, что есть такое понятие как указатели на функции...почитал, ну вроде разобрался...а теперь вот думаю как бы их можно было использовать, разумеется эффективно )...К примеру я пишу программу на какой-нибудь прибор - регулятор температуры...где скажем мне у алгоритме указатели на функции понадобятся или они всё же эффективно используюся только для написания меню...За раннее благодарен.

Также хотел бы уточнить ещё одну вещь, в ИАРе есть тип памяти data16 и data20. Выходит они отличаются разным диапазоном адресов 64кБ(0xFFFF) и 1МБ(0xFFFFF) и соответственно размером указателей (16 и 32 бита).Тип памяти, который я буду использовать завит от железа? Если я объявляю переменную, она буде по умолчанию типа data16? И зачем предвидено эти 2 типа памяти, как я могу использовать data20 для своих удобств?

Сообщение отредактировал Twen - Nov 29 2010, 20:17
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 29 2010, 21:02
Сообщение #2


Гуру
******

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



Указатели на функции требуются в основном только там, где сами вызываемые функции должны быть разные при унифицированном обработчике их вызовов. Кроме UI (пользовательский интерфейс/меню) и планировщика ОС такая ситуация может быть возможна, например, при написании функции разбора запроса какого-нибудь сетевого протокола. Сам запрос обрабатывается единообразно, но в зависимости от типа запрошенных данных эти данные могут располагаться где угодно, не обязательно в ОЗУ МК, но и, например, во внешней Flash, SDCard или в другом устройстве, подключенном к данному коммуникационному МК.
Go to the top of the page
 
+Quote Post
Twen
сообщение Nov 29 2010, 21:14
Сообщение #3


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

Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543



Понятно, спасибо, просто хочется применить на практике прочитанный материал )

А по поводу дата16 и 20 я уже понял, внимательно прочитал даташит, просто есть ядро 430X, в котором есть дополнительные инструкции и большее пространство памяти 1МБ.
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 29 2010, 22:19
Сообщение #4


Гуру
******

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



Цитата(Twen @ Nov 30 2010, 02:14) *
А по поводу дата16 и 20 я уже понял, внимательно прочитал даташит, просто есть ядро 430X, в котором есть дополнительные инструкции и большее пространство памяти 1МБ.
Да, верно. Если вы работаете с функциями, расположенными в пределах Flash 64кБ (размер исходника не превышает) и/или с функциями расположенными в RAM, то можете просто не заморачиваться с data20. Доп. команды компилятор использовать не будет.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Nov 30 2010, 11:20
Сообщение #5


Гуру
******

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



Цитата(rezident @ Nov 30 2010, 01:02) *
Указатели на функции требуются в основном только там...

Позволю себе не согласиться.
Я широко использую для организации автомата состояний вместо switch.
Хотя современные компиляторы и могут заоптимизировать switch в массив функций, все ж функции нагляднее получаются, да и средствами препроцессора проще править состояния.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 30 2010, 20:35
Сообщение #6


Гуру
******

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



Цитата(Dog Pawlowa @ Nov 30 2010, 16:20) *
Позволю себе не согласиться.
Я широко использую для организации автомата состояний вместо switch.
Ну и как это противоречит моему обрезанному вами в цитате полному предложению? Считайте switch как "унифицированный обработчик вызовов". Теперь возражения есть? rolleyes.gif
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Dec 1 2010, 03:02
Сообщение #7


Гуру
******

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



Цитата(rezident @ Nov 30 2010, 23:35) *
Теперь возражения есть? rolleyes.gif

Теперь нет, видимо, что-то не сработало сразу в моей голове при чтении Вашего текста wink.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 1 2010, 08:13
Сообщение #8


;
******

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



Цитата(rezident @ Dec 1 2010, 00:35) *
Считайте switch как "унифицированный обработчик вызовов". Теперь возражения есть? rolleyes.gif

Самое главное - что история полемики по switch() уже лет 20 тянется, а оптимизаций "без сюрпризов" так и нету. Именно поэтому в ГЦЦ использую известную как "labels as values" фичу, для устранения неоднозначностей толкования.
Go to the top of the page
 
+Quote Post

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

 


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


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