реклама на сайте
подробности

 
 
> не понимаю причины варнинга - объясните, IAR считает, что code has no effect
acorn
сообщение Dec 1 2006, 14:21
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 58
Регистрация: 28-11-05
Пользователь №: 11 495



IAR 4.12A, mega16. Выкинул всё из большого проекта, оставил минимум. Строки, помеченные "//warning", вызывают "Warning[Pe174]: expression has no effect" - почему? В реальном проекте прерывания есть и они используют поле "STATUS.sec":
Код
#include <inavr.h>

typedef struct {
    unsigned char sec:1;
} statusDef;

extern volatile statusDef STATUS;

unsigned char essTime (unsigned char keys) {
    __save_interrupt;        //warning
    __disable_interrupt;     //warning
    STATUS.sec = 0;
    __restore_interrupt;     //warning
    return 0;
}

__task void main (void) {
    __enable_interrupt();
    essTime (0);
    while (1) {
    }
}


Генерированный код функции essTime:
Код
    LDI     R30,0x60
    LDI     R31,0x00
    LD      R16,Z
    ANDI    R16,0xFE
    ST      Z,R16
    LDI     R16,0x00
    RET


Я считаю, что между LD и ST может возникнуть прерывание, изменяющее volatile переменную, и данный код её испортит. Почему компилятор со мной не согласен? Спасибо.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 14:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01354 секунд с 7
ELECTRONIX ©2004-2016