К сожалению в IAR так не сделать, потому что define не может возвращать значение, это расширение GCC.
В IAR это макрос должен был бы выглядеть так
#define PSTR(s) ({static __flash const char __c[]= (s); &__c[0];})
но работать он не будет

Здесь часто поднимались подобные вопросы, но решения я еще не видел.
Приходится руками описывать переменную
static __flash const char[] ....
Или можно определить макрос вызова функции где первый параметр строка во флеше
#define p_call(f,s,...) {static __flash const char __c[]= (s); f(__c,__VA_ARGS__); }
Вот только если у функции один параметр строка - то этот макрос будет работать с ошибками, нужен такой вариант
#define p_call1(f,s) {static __flash const char __c[]= (s); f(__c); }