Хм.. Дописал немного кода, снова начало глючить там-же. Посмотрел куда указывает аборт - кто-то портит код в прерывании, вынесенном в __ramfunc. Если из озу убрать, то дата аборта нет.
Портит типа такого(всегда в примерно разных местах в пределах + - 10):
Код
Нормальный:
ADC_buf3[ADC_buf7_count] = ADC_DATA_3;
00000328 E59F10F8 LDR R1, [PC, #+248] ; [0x428] =ADC_buf7_count (0x201464)
0000032C E5911000 LDR R1, [R1, #+0]
00000330 E3A02004 MOV R2, #0x4
00000334 E59F3108 LDR R3, [PC, #+264] ; [0x444] =ADC_buf3 (0x201310)
00000338 E0213192 MLA R1, R2, R1, R3
0000033C E59F2104 LDR R2, [PC, #+260] ; [0x448] =ADC_CDR3 (0xFFFD803C)
00000340 E5922000 LDR R2, [R2, #+0]
00000344 E5812000 STR R2, [R1, #+0]
Порченный:
ADC_buf3[ADC_buf7_count] = ADC_DATA_3;
00201508 E59F10F8 LDR R1, [PC, #+248] ; [0x201608] =ADC_buf7_count (0x201464)
0020150C E5911000 LDR R1, [R1, #+0]
00201510 E3A02004 MOV R2, #0x4
00201514 E59F3108 LDR R3, [PC, #+264] ; [0x201624] =ADC_buf3 (0x201310)
!!! 00201518 FFFFFFFF SWINV 0xFFFFFF
0020151C E59F2104 LDR R2, [PC, #+260] ; [0x201628] =ADC_CDR3 (0xFFFD803C)
00201520 E5922000 LDR R2, [R2, #+0]
00201524 E5812000 STR R2, [R1, #+0]
Дело почти однозначно в этой ф-и(про которую выше говорил) т.к. когда ее комментирую все работает долго и без глюков. Думаю, что-то с расположением таблици.. Код в прерывании портится не непосредственно этой функцией.. Где-то дальше, не смог найти где.
Какие могут быть нюансы с таблицей?
const unsigned char crc_table[256] = {
0x00,0x5E,0xBC,0xE2,0x61,0x3F,0xDD,0x83 ...
Или если не таблица, куда снова копать?..