Ради интереса из const перевел массивы в static. Программа начала работать нормально, но при наращивании текста в подпрограмме обработки 0 таймера получил опять вылеты. Да еще 2 года не пользовал Эклипс+АРМ :-(.
Размещение массивов в качестве const.
Код
*(.gcc_except_table)
*(.rodata)
*(.rodata*)
.rodata.gte8 0x00004228 0x300 lcd_wg19232b.o
0x00004228 gte8
.rodata.hv_on 0x00004528 0xb4 lcd_wg19232b.o
0x00004528 hv_on
.rodata.hv_off
0x000045dc 0xb4 lcd_wg19232b.o
0x000045dc hv_off
.rodata.hv_0_9_16x25
0x00004690 0x1f4 lcd_wg19232b.o
0x00004690 hv_0_9_16x25
.rodata.zpt_5x25
0x00004884 0x19 lcd_wg19232b.o
0x00004884 zpt_5x25
.rodata.kv_x25
0x0000489d 0x64 lcd_wg19232b.o
0x0000489d kv_x25
.rodata.hv_1_12x25.1360
0x00004901 0x32 lcd_wg19232b.o
.rodata.C.0.1460
0x00004933 0x6 lcd_wg19232b.o
*(.gnu.linkonce.r.*)
*(.rodata)
*(.rodata*)
.rodata.gte8 0x00004228 0x300 lcd_wg19232b.o
0x00004228 gte8
.rodata.hv_on 0x00004528 0xb4 lcd_wg19232b.o
0x00004528 hv_on
.rodata.hv_off
0x000045dc 0xb4 lcd_wg19232b.o
0x000045dc hv_off
.rodata.hv_0_9_16x25
0x00004690 0x1f4 lcd_wg19232b.o
0x00004690 hv_0_9_16x25
.rodata.zpt_5x25
0x00004884 0x19 lcd_wg19232b.o
0x00004884 zpt_5x25
.rodata.kv_x25
0x0000489d 0x64 lcd_wg19232b.o
0x0000489d kv_x25
.rodata.hv_1_12x25.1360
0x00004901 0x32 lcd_wg19232b.o
.rodata.C.0.1460
0x00004933 0x6 lcd_wg19232b.o
*(.gnu.linkonce.r.*)
Как Вы думаете. Проблема с размещением массивов, или это всего лишь выявило ошибку?
Что смотреть в первую очередь?
Ниже код, добавления которого сбивает программу с массивами static, переменные volatile uint8_t.
Код
breakdown_time++;
if (breakdown_time >= 100)
{
breakdown_integrator = breakdown_integrator << N_impuls;
N_impuls =0;
breakdown_time =0;
breakdown_time_minus++;
}
if (breakdown_integrator > 20)
{
FIO2CLR = (1 << 11); .
breakdown_fault =1;
}
if (breakdown_time_minus > 10)
{
breakdown_integrator = breakdown_integrator >> 0x01;
breakdown_time_minus =0;
}
if (breakdown_time >= 100)
{
breakdown_integrator = breakdown_integrator << N_impuls;
N_impuls =0;
breakdown_time =0;
breakdown_time_minus++;
}
if (breakdown_integrator > 20)
{
FIO2CLR = (1 << 11); .
breakdown_fault =1;
}
if (breakdown_time_minus > 10)
{
breakdown_integrator = breakdown_integrator >> 0x01;
breakdown_time_minus =0;
}
Код еще бессмысленный, переменные во "вне" еще не изменяются.