Многое не так делаете...
1. В Вашей подпрограмме сохранение никогда и не будет - у Вас переменная mem будет true в любом случае до конца цикла (до низа поля программы). В начале следующего прохода она уже опять будет равно false...
2. Не делайте Retain внутри блока, если Вы не уверенны, что в момент пропадания питания блок будет вызываться из основной программы. Да и в принципе Retain я бы делал в основной программе.
3. Объявляйте их просто Retain - не заносите в маркерную память.
4. Адрес переменной AT %... недопустим!!!!!!!!!!!!!!!!!!!

Начните с простого - создайте простую программу без подпрограмм, и задайте в ней пару переменных типа Retain. Как сохранятся- двигайтесь дальше.