Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR C v5.11 переопределение I/O
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Д_М
Здравствуйте!
Старичёк IAR v2.28 позволял многократно преопредилять порты микроконтроллера например:

Код
__no_init volatile __io union
{
unsigned char Uni_Hi;// Control signals
struct
    {
    unsigned char P_B0:1;
    unsigned char P_B1:1;
    unsigned char P_B2:1;
    unsigned char P_B3:1;
    unsigned char P_B4:1;
    unsigned char White_LED:1;
    unsigned char RxGreen_LED:1;
    unsigned char RxRed_LED:1;
    };
} @ 0x18;// PortB

Он даже не ругался, если два одинаковых переопределения были в одном файле.

v5.11 же ругался до тех пор, пока не отключил из программы файл IOAVR.h. Пришлось руками набить все нужные ресурсы.
Вроде бы и не сложно, но как-то не красиво. Высока вероятность ошибки, которую ух как долго придётся искать.
Как исключить конфликты между стандартными определениями портов и своими собственными?
Заранее спасибо!
Xenia
Цитата(Д_М @ Jun 14 2014, 02:30) *
Как исключить конфликты между стандартными определениями портов и своими собственными?


Откомпилировала:

Код
#define ENABLE_BIT_DEFINITIONS

#include <ina90.h>
#include <ioavr.h>

__no_init volatile __io union
{
unsigned char Uni_Hi;// Control signals
struct
{
unsigned char P_B0:1;
unsigned char P_B1:1;
unsigned char P_B2:1;
unsigned char P_B3:1;
unsigned char P_B4:1;
unsigned char White_LED:1;
unsigned char RxGreen_LED:1;
unsigned char RxRed_LED:1;
};
} @ 0x18;// PortB
.......
C_task main()
{
.......
  White_LED = 1;
.......
}

Ни ошибок, ни варнингов не обнаружено. Результат компиляции:

Код
486            White_LED  = 1;
\   0000000E   9AC5               SBI     0x18, 0x05

Компилятор IAR EWAVR 6.40.1.
x893
То что раньше не ругался - это не означает, что это правильно.
armcc говорит о куче ошибок после gcc - это не значит что это ошибки - но это нарушение стандарта.
Старые компиляторы конечно проверяют меньше, но если написано правильно (или исправлено), то новые нормально компилируют. Я стараюсь так писать код, что бы даже предупреждений не было. Но 90% писателей строчат так, что только на том, на чем они строчили - на том и компилируется, а на другом компиляторе тысячи ошибок.
Дело личное каждого, как делать.
Двойные определения конечно упрощают жизнь (кто последний тот и прав), но если нарушится порядок - всё слетит.
Поэтому разработчики компиляторов и стараются как-то упростить жизнь писателям кодов.
Д_М
Набил тоже самое - не работает. Ошибка линковщика. Смотрите вложение. Может быть, поделитесь компилятором?! Заранее благодарен!
Xenia
Цитата(Д_М @ Jun 14 2014, 16:15) *
Набил тоже самое - не работает. Ошибка линковщика. Смотрите вложение.


Вложения не вижу. Написала вам в личку.
Д_М
Попробовал изменить Project -> Edit Configuration c Release обратно на Debug. Ошибок нет. Каков смысл в конфигурации - Release/ Debug? Чем они отличаются?
Сергей Борщ
Цитата(Д_М @ Jun 14 2014, 16:54) *
Каков смысл в конфигурации - Release/ Debug? Чем они отличаются?
Смысл конфигурации - совокупность расставленных галочек на остальных вкладках. Вы можете создать еще одну, обозвать ее хоть горшком, и когда вы будете выбирать эту конфигурацию, на остальных вкладках будут появляться расставленные вами галочки. Так что чтобы найти разницу между созданными разаработчиками оболочки Debug и Release - сравнивайте, как расставлены галочки в них.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.