Страница 1 из 1

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

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

Я новичок в C (мягко говоря) - всю жизнь ваял на ассемблере.

Добавлено: Пт янв 30, 2009 18:55:40
ARV
это объявление указателя на функцию без параметров, которая не возвращает значение. значение этого указателя приравнивается нулю. таким образом, при обращении к этому указателю, как к функции, произойдет переход на нулевой адрес.

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

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

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

#define HOT_RESET ((void (*)()) 0)
вызов HOT_RESET();