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

 
 
 
Reply to this topicStart new topic
> IAR C v5.11 переопределение I/O
Д_М
сообщение Jun 13 2014, 18:20
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185



Здравствуйте!
Старичёк 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. Пришлось руками набить все нужные ресурсы.
Вроде бы и не сложно, но как-то не красиво. Высока вероятность ошибки, которую ух как долго придётся искать.
Как исключить конфликты между стандартными определениями портов и своими собственными?
Заранее спасибо!

Сообщение отредактировал IgorKossak - Jun 15 2014, 19:46
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jun 13 2014, 19:17
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Д_М @ 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.
Go to the top of the page
 
+Quote Post
x893
сообщение Jun 13 2014, 19:45
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



То что раньше не ругался - это не означает, что это правильно.
armcc говорит о куче ошибок после gcc - это не значит что это ошибки - но это нарушение стандарта.
Старые компиляторы конечно проверяют меньше, но если написано правильно (или исправлено), то новые нормально компилируют. Я стараюсь так писать код, что бы даже предупреждений не было. Но 90% писателей строчат так, что только на том, на чем они строчили - на том и компилируется, а на другом компиляторе тысячи ошибок.
Дело личное каждого, как делать.
Двойные определения конечно упрощают жизнь (кто последний тот и прав), но если нарушится порядок - всё слетит.
Поэтому разработчики компиляторов и стараются как-то упростить жизнь писателям кодов.

Сообщение отредактировал x893 - Jun 13 2014, 19:45
Go to the top of the page
 
+Quote Post
Д_М
сообщение Jun 14 2014, 08:05
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185



Набил тоже самое - не работает. Ошибка линковщика. Смотрите вложение. Может быть, поделитесь компилятором?! Заранее благодарен!


Сообщение отредактировал IgorKossak - Jun 15 2014, 19:46
Причина редактирования: избыточное цитирование
Go to the top of the page
 
+Quote Post
Xenia
сообщение Jun 14 2014, 08:43
Сообщение #5


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Д_М @ Jun 14 2014, 16:15) *
Набил тоже самое - не работает. Ошибка линковщика. Смотрите вложение.


Вложения не вижу. Написала вам в личку.
Go to the top of the page
 
+Quote Post
Д_М
сообщение Jun 14 2014, 09:44
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185



Попробовал изменить Project -> Edit Configuration c Release обратно на Debug. Ошибок нет. Каков смысл в конфигурации - Release/ Debug? Чем они отличаются?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 14 2014, 10:22
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Д_М @ Jun 14 2014, 16:54) *
Каков смысл в конфигурации - Release/ Debug? Чем они отличаются?
Смысл конфигурации - совокупность расставленных галочек на остальных вкладках. Вы можете создать еще одну, обозвать ее хоть горшком, и когда вы будете выбирать эту конфигурацию, на остальных вкладках будут появляться расставленные вами галочки. Так что чтобы найти разницу между созданными разаработчиками оболочки Debug и Release - сравнивайте, как расставлены галочки в них.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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

 


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


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