ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
214057
bialix (04.10.2010 14:57, просмотров: 7588)
avr-gcc+mega128: как заставить компилятор использовать 32-бита для указателей? По умолчанию указатели 16-битные, что не позволяет обратиться к строке в старших адресах флеши. Задача: имеется бутлоадер, в котором для ответов используются подготовленные строки во флеш-памяти, например: #include <avr/pgmspace.h> prog_uchar answer_program_mode_on[] = {6, 0x7F, 0xAA, 0xBA, 0x01, 0x9B, 0x7F}; Поскольку загрузчик живет в самых старших адресах, то и собственно указатель на строку должен быть как минимум 17-битным. Однако, при попытке использовать имя answer_program_mode_on как указатель с приведением оного к uint32_t получаю ругань компилятора и неверный код (видно в дизасме, что адрес только 2х байтный). void send_packet_from_pgm(uint32_t addr) send_packet_from_pgm((uint32_t)answer_program_mode_on);
commands.c:95: warning: cast from pointer to integer of different size
Дока на заголовок pgmspace.h очень сильно рекомендует использовать строки только из младших 64К, что явно не мой случай. Чего я не понимаю? ПыСы: как обойти проблему я уже знаю -- придется положить строки в ОЗУ, благо его там много. Просто я сделал универсальный загрузчик для линейки устройств на мегах, и до сего момента (пока флеша в мегах было не больше чем 64КБ) проблем с этим не возникало. Я разобраться хочу, как объяснить avr-gcc что он не прав.