Здравствуйте Пишу на SDCC для C8051F350. Память программ (8кБ флэш - выполняет также функцию ЕЕПРОМа) имеет организацию в виде блоков по 512 кБайт, стираться может только целиком по одному блоку, чтобы перезаписать - надо сначала стереть, потом записать (классика, в общем) Последний блок (16-ый == 0x1E00-0x1FFF) мне недоступен - я так понял, что его использует загрузчик при программировании. В предпоследнем блоке (15-ый == 0x1C00-0x1DFF) в последнем байте хранится защита блоков, поэтому этот блок я могу стирать только при программировании, из программы мне его не возможно стереть. После очередной модификации программа у меня стала заканчиваться по адресу 0x1A7f - в 14-ом блоке. Раньше в этом блоке лежали настройки, теперь считать настройки я могу, а запрограммировать в процессе работы (в результате калибровки, настройки) - уже не могу, так как в результате тру код программы. Задумал перенести в 15 блок одну функцию (она 260 байт занимает), чтобы программа в 14 блок не влазила - и вот не смог разобраться как в SDCC это сделать. Указываю размещать данные по адресу 0x1A00 - 0x1BFF компилятор всё равно ложит код в 14-ый блок. Перепробовал всё, до чего только смог додуматься после чтения документации, - пофиг. Может кто-то такое делал? Hу или как в других компиляторах, может хоть это натолкнёт меня на мысль.
- posted
13 years ago