Перейти к содержанию
    

Переезд из CVAVR в Atmel Studio

Коллеги, может, кто сталкивался,

 

перевожу проект из 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 и, соответственно, принудительный перевод векторов на бутлодер в начале бутлодера?

Изменено пользователем ffs2001

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Первый вопрос решил так:

 

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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...