ffs2001 0 25 мая, 2016 Опубликовано 25 мая, 2016 (изменено) · Жалоба Коллеги, может, кто сталкивался, перевожу проект из CVAVR в Atmel Studio 7. Код проверенный и 100% рабочий. В Studio заработало, но с нюансами: код, нормально выполняющийся в CVAVR: (читаем уникальный код Атмеги, SP-драйвер родной Атмелевский) uint8_t i; uint8_t addr[11] ={0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x10,0x12,0x13,0x14,0x15}; for (i=0; i<11; i++){ SP_WaitForSPM(); int2hexstr(SP_ReadCalibrationByte(addr[i]),guid,i*2); } код, работающий в Studio uint8_t i; uint8_t addr[11] ={0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x10,0x12,0x13,0x14,0x15}; [b]_delay_ms(2);[/b] for (i=0; i<11; i++){ SP_WaitForSPM(); int2hexstr(SP_ReadCalibrationByte(addr[i]),guid,i*2); [b]_delay_ms(2);[/b] } Без делея выдаёт фуфло. На что ему делей? И ещё непонятный момент. Работа начинается с bootloader'а, в некоторый момент происходит jump 0x00. Иногда в application section пусто (так задумано), и контроллер "по нолям" снова приходит в бутлоадер. void jump_to_0(){ CCP = CCP_IOREG_gc; PMIC.CTRL = 0; asm volatile("jmp 0x00"); } После CVAVR всё происходит без проблем, а после Студии – начинает глючить USART, например. Правильно ли я понимаю, что в Студии нужно делать что-то вроде pmic_set_vector_location(PMIC_VEC_APPLICATION) перед jump 0x00 и, соответственно, принудительный перевод векторов на бутлодер в начале бутлодера? Изменено 26 мая, 2016 пользователем ffs2001 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ffs2001 0 26 мая, 2016 Опубликовано 26 мая, 2016 · Жалоба Первый вопрос решил так: uint8_t i; uint8_t addr[11] ={0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x10,0x12,0x13,0x14,0x15}; for (i=0; i<11; i++){ NVM_CMD = NVM_CMD_NO_OPERATION_gc; SP_WaitForSPM(); NVM_CMD = NVM_CMD_READ_CALIB_ROW_gc; //int2hexstr(SP_ReadCalibrationByte(addr[i]),guid,i*2); int2hexstr(pgm_read_byte(addr[i]),guid,i*2); NVM_CMD = NVM_CMD_NO_OPERATION_gc; } т.е. заменил код из Атмелевского SP_driver.s на Студиевский из avr/pgmspace.h . Буду благодарен, если кто-то подскажет, в чём принципиальная разница. Хм. Второй глюк тоже ушёл. В CVAVR я использовал не SP_driver.s целиком, а копировал частично код, оформляя в виде функций с ассемблерными вставками. Видимо, где-то накосячил с регистром ожидания. Нефиговые ошибки, однако, прощает компилятор CVAVR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться