Цитата(mempfis_ @ Aug 5 2008, 17:23)

Может поделитесь опытом кто что очищает при старте микроконтроллера

Ничего. Что такое в вашем понятии "очищает"? По стандарту неинициализированным явно статическим и глобальным переменным присваивается значение 0 (в стартап-коде). Это "очистка"? А если написать int a = 0; - это очистка? А если int a = 1; - это еще очистка или уже нет?
Цитата(mempfis_ @ Aug 5 2008, 17:23)

достаточно-ли будет очистить регистры и оперативку
Не только не достаточно, а вообще этого делать не нужно. Зачем "очищать" память, которая не будет использоваться программой? Ведь та память, которая будет использоваться (глобальные и статические переменные) будет очищена startup-кодом. А область временных переменных (стек) будет постоянно затираться и никакая начальная "очистка" не поможет - при следующем вызове функции от "очистки" не останется и следа. Именно поэтому локальные переменные после объявления имеют неопределенное значение и должны быть проинициализированны явно перед использованием.
Зачем "очищать" регистры, если в процессе работы в них все равно будет сначала записано какое-то значение?
Цитата(mempfis_ @ Aug 5 2008, 17:23)

, или нужно делать более тщательную очистку (очищать переферию)?
А вот нужную периферию инициализировать нужно всегда. Как же без этого?