Цитата(Target @ Nov 25 2015, 18:33)

А подскажите, как получить трехбайтовую величину? Хочу получить длину программы по окончанию сегмента NEAR_ID.
Пытаюсь получить адрес сегмента NEAR_ID.
Очень похоже на то, что сказывается гарвардская архитектура AVR. Указатели на память данных и память кода это две совершенно разные сущности и просто так не смешиваются.
А у Вас как раз написано unsigned long * pNEAR_ID_end = ..., что подразумевает указатель на память данных, в то время как сегмент NEAR_ID располагается во флеше.
В EWAVR_CompilerReference.pdf есть подсказка:
Цитата
If the segment was declared with a memory attribute
memattr, the type of the __segment_begin operator is a pointer to memattr void.
Otherwise, the type is a default pointer to void.
Попробуйте так:
#pragma segment = "NEAR_ID" __farflash
char __farflash* pNEAR_ID_end = __segment_end("NEAR_ID");
а то и просто
uint32_t pNEAR_ID_end = __segment_end("NEAR_ID");