Описание из iarcompat.h:
#ifndef USB_BUFFER_SECTION
# define USB_BUFFER_SECTION "TINY_Z" /* if user has not selected a named section */
#endif
Вопрос- Как описать этот сегмент, чтобы иар не ругался?
#ifndef USB_BUFFER_SECTION
# define USB_BUFFER_SECTION "TINY_Z" /* if user has not selected a named section */
#endif
Вопрос- Как описать этот сегмент, чтобы иар не ругался?

Буфер для приема данных должен быть размещен так, чтобы не пересекать границу 256 байт (то есть, его адрес должен быть полностью зависим только от младшего байта адреса, старший должен быть константой). В простейшем случае это может быть в IAR гарантировано размещением в TINY_x сегментах, которые гарантированно находятся в пределах младших 256 байтов адресного пространства.
В ряде контроллеров RAM находится, начиная с адреса 0x100 (то есть, там TINY области, как таковой, нет вообще). Очевидно, что невозможно разместить буфер в области нулевой длины.
Решения два:
Поставить #define USB_BUFFER_SECTION "NEAR_Z" где-нибудь в usbconfig.h, чтобы явно заказать размещение в одном из существующих стандартных сегментов достаточной длины. При этом важно после линковки убедиться, что весь указанный буфер полностью размещен так, чтобы не пересекать и даже не касаться границы 256-байтной области, например, полностью лежать в пределах 0x100-0x1fe включительно (1ff уже не допустим, так как при инкременте будет изменен старший байт адреса).
Процедура заглядывания в файл линковки каждый раз способна утомить, потому есть второй вариант - явно описать свой собственный сегмент с явно заданными границами адресов, удовлетворяющими названным требованиям. В этом случае линкер будет сам следить за их выполнением, но это может в определенных случаях (при неправильном описании) снизить эффективность размещения сегментов.
О том, как описывать сегменты в командной строке линкера (которую можно просто добавить в файл конфигурации проекта в качестве дополнительных опций) - см. документацию на линкер.