Цитата(_Артём_ @ Mar 27 2012, 20:16)

Код
void (*FuncPtr) (void) = (void (*)(void)) ((LAST_INTVECT_ADDRESS + 2) / 2); // Set up function pointer to address after last interrupt vector.
FuncPtr ();
можно короче:
Код
(*(void(*)(void))(BOOTLOADER_START_ADDRESS/2))(); // div 2 is to convert byte to word addressing mode for icall
Цитата(_Артём_ @ Mar 27 2012, 20:16)

То есть точка входа для основной программы - это первый адрес после таблицы векторов. Но можно ли быть уверенным что это всегда так (для IAR)?
Я бы не стал на это полагаться, ибо при отсутствии обработчиков точка входа может быть расположена и поверх векторов. Кто знает что разработчики там наоптимизируют в следующий раз. Я думаю что точка входа должна быть определена линкеру и вам соответственно тоже, посмотрите внимательно на скрипт там же по вектору ресета осуществляется переход по какому-то адресу и этот адрес наверняка определён в виде какого-то имени вот его и стоит использовать.
Цитата(_Артём_ @ Mar 27 2012, 20:16)

И ещё: насколько универсальны фунции самопрограммирования использованные в appn (ProcessPageErase, ProcessPageUpdate, Erase_One_Page)?Будут ли они работать на M8, M88? Кто-нибудь ими пользовался?
Я использую аналогичный интерфейс от gcc и никаких граблей не замечал. Так что стоит попробовать чтобы не изобретать велосипед.