конструкция void(*StartAddr)(void) = 0x000; Что это?

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

Сообщение mackerel »

Собственно, сабж...
Что это за конструкция? Это, вроде, не прототип функции, не описание её, не объявление переменной...
Но работает! Т.е. мне понятно, что вызов StartAddr(); приведёт к сбросу. Но хотелось бы детального объяснения этой конструкции, а то пользоваться чем-то, не понимая, как-то неприятно.

Я новичок в C (мягко говоря) - всю жизнь ваял на ассемблере.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18785
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

mackerel писал(а): конструкция void(*StartAddr)(void) = 0x000;
...
Неудачная реализация "горячего" сброса. Под указатель резервируется память.
Лучше так:

Код: Выделить всё

#define HOT_RESET ((void (*)()) 0)
вызов HOT_RESET();
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»