Добрый день!
Не поможет ли кто разобраться с Keil mVision? Использую версию 4.14.16.0 с таблеткой.
Целевой микроконтроллер Si1020 от SiLabs (Flash 128 k, RAM 8 k). Язык разработки C.
Пока отлаживал небольшие куски программ - радовался, как удобно. (Скомпилорованный файл - 6 K).
Попробовал подключить FatFS и всё стало плохо - выдаётся ошибка переполнения памяти.
(ERROR L107: ADDRESS SPACE OVERFLOW с последующей
ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT )
Написал тестовую программу и совсем удивился:
Программа 1
Код
const char Test_Array [96] = // <--- !!!
// По 32 знака в строке.
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// Закоментировал строку.
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
//-----------------------------------------------------------------------------
// main() Routine
//-----------------------------------------------------------------------------
void main (void)
{
char n;
n = Test_Array [1]; // n упомянул, чтобы подлинковать Test_Array
while (1)
{
} // while (1)
} // main ()
Результат компиляции
Код
Build target 'Target 1'
compiling main.c...
linking...
Program Size: data=106.0 xdata=0 code=248
creating hex file from "Test"...
"Test" - 0 Error(s), 0 Warning(s).
Программа 2
Код
const char Test_Array [128] = // <--- !!!
(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
//-----------------------------------------------------------------------------
// main() Routine
//-----------------------------------------------------------------------------
void main (void)
{
char n;
n = Test_Array [1];
while (1)
{
} // while (1)
} // main ()
Результат компиляции
Код
Build target 'Target 1'
compiling main.c...
linking...
*** ERROR L107: ADDRESS SPACE OVERFLOW
SPACE: DATA SEGMENT: ?DT?MAIN
LENGTH: 0080H
***
ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
SYMBOL: TEST_ARRAY
SEGMENT: ?DT?MAIN
Program Size: data=138.0 xdata=0 code=280
Target not created
Та же ошибка, что и в моём проекте. (единственнея разница, что у vеня её много - по одной на каждую функцию FatFS) Почему? Ведь в микроконтроллере немеряно памяти для кода, откуда ADDRESS SPACE OVERFLOW ?
Сообщение отредактировал IgorKossak - May 28 2013, 13:48
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!