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

 
 
> не понимаю причины варнинга - объясните, 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
 
Start new topic
Ответов
Rst7
сообщение Dec 2 2006, 11:10
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Вы что???
Код
char st=__save_interrupt();
__disable_interrupt();
....
__restore_interrupt(st);


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post



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

 


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


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