|
|
  |
предупреждения компилятора, прошу объяснить |
|
|
|
Dec 14 2007, 11:33
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
Вот фрагмент текста программы: Код __no_init UCHAR RxBuf[2][BUFSIZE] __attribute__ ((section (BUFFER_SECTION))) IAR_SECTION(BUFFER_SECTION); UCHAR InputBuf; UCHAR AppBuf;
-> InputBuf = (UCHAR)RxBuf[0]; -> AppBuf = (UCHAR)RxBuf[1]; и в указанных стрелкой строчках компилятор выдает следующие предупреждения Код Warning[Pe767]: conversion from pointer to smaller integer Warning[Pe767]: conversion from pointer to smaller integer Объясните, пожалуйста, что не так и как с этим бороться. К хелпу просьба не отсылать, с аглицким туго
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
Dec 14 2007, 11:48
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(dimka76 @ Dec 14 2007, 14:33)  Объясните, пожалуйста, что не так и как с этим бороться. У вас есть __двумерный__ массив типа UCHAR. Потом вы обращаетесь к __строке__ этого массива, которая имеет тип UCHAR* и пытаетесь записать этот __указатель__ в переменную типа UCHAR. По-моему, у вас тут что-то не то с логикой...
|
|
|
|
|
Dec 14 2007, 11:50
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
Цитата(scifi @ Dec 14 2007, 14:39)  Судя по всему, приоритет оператора приведения типа () выше, чем приоритет оператора индекса массива []. Попробуйте добавить дополнительные скобки. пробовал. результат тот же. Цитата(Непомнящий Евгений @ Dec 14 2007, 14:48)  У вас есть __двумерный__ массив типа UCHAR. Потом вы обращаетесь к __строке__ этого массива, которая имеет тип UCHAR* и пытаетесь записать этот __указатель__ в переменную типа UCHAR. По-моему, у вас тут что-то не то с логикой... этот проект я взял готовым, и пытаюсь с ним разобраться
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
Dec 14 2007, 12:00
|
Знающий
   
Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153

|
Цитата(dimka76 @ Dec 14 2007, 14:50)  пробовал. результат тот же. Приоритет [] выше, чем у приведения типа. поэтому скобки делу не помогут. Цитата этот проект я взял готовым, и пытаюсь с ним разобраться У вас идет попытка сохранить указатель в байте. При этом обрежутся старшие байты указателя. Компилятор вас об этом честно предупреждает. Смысл такой операции довольно сомнителен... Может быть на той платформе, под которую писали проект, sizeof(UCHAR) == sizeof(UCHAR*)... А что дальше происходит с InputBuf и AppBuf?
|
|
|
|
|
Dec 14 2007, 12:12
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
Цитата(Непомнящий Евгений @ Dec 14 2007, 15:00)  Может быть на той платформе, под которую писали проект, sizeof(UCHAR) == sizeof(UCHAR*)... А что дальше происходит с InputBuf и AppBuf? Дальше эти переменные используются в ассемблерной функции Код lds YL, InputBuf ..... lds YL, InputBuf ...... sts InputBuf, x1 ........ Этот проект изначально был написан для WinAVR, я его переделал в IAR. Справился со всеми ошибками и предупреждениями кроме этих.
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
Dec 14 2007, 12:48
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(dimka76 @ Dec 14 2007, 14:33)  Вот фрагмент текста программы: Код __no_init UCHAR RxBuf[2][BUFSIZE] __attribute__ ((section (BUFFER_SECTION))) IAR_SECTION(BUFFER_SECTION); UCHAR InputBuf; UCHAR AppBuf; -> InputBuf = (UCHAR)RxBuf[0]; -> AppBuf = (UCHAR)RxBuf[1]; и в указанных стрелкой строчках компилятор выдает следующие предупреждения Код Warning[Pe767]: conversion from pointer to smaller integer Warning[Pe767]: conversion from pointer to smaller integer Объясните, пожалуйста, что не так и как с этим бороться. Компилятор, конечно, прав, но при следовании требованиям в usbdrv.h Цитата Limitations: ============ Compiling: You should link the usbdrv.o module first because it has special alignment requirements for the receive buffer (the buffer must not cross a 256 byte page boundary, it must not even touch it at the end). If you can't link it first, you must use other measures to ensure alignment. Note: gcc does not always assign variable addresses in the order as the modules are linked or the variables are declared. You can choose a memory section for the receive buffer with the configuration option "USB_BUFFER_SECTION". This option defaults to ".bss". If you use your own section, you can place it at an arbitrary location with a linker option similar to "-Wl,--section-start=.mybuffer=0x800060". Use "avr-nm -ng" on the binary and search for "usbRxBuf" to find tbe base address of the 22 bytes rx buffer. и в usbdrv.c Цитата /* usbRxBuf MUST be in 1 byte addressable range (because usbInputBuf is only 1 byte) */ на эти предупреждения можно забить. Применительно к IAR требования удовлетворяются опцией линкера (Project->Options->Linker->Extra options) -Z(DATA)USB_BUFFER_SECTION=0100-01FE Цитата К хелпу просьба не отсылать, с аглицким туго  К сожалению, вариантов немного.
|
|
|
|
|
Dec 14 2007, 12:58
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
Цитата(xemul @ Dec 14 2007, 15:48)  на эти предупреждения можно забить. Применительно к IAR требования удовлетворяются опцией линкера (Project->Options->Linker->Extra options) -Z(DATA)USB_BUFFER_SECTION=0100-01FE
К сожалению, вариантов немного. спасибо за помощь. А если мой код размещается в секции загрузчика, что тогда мне следует указать в опциях ликера. Кстати, я использую свой файл .xcl Ой, извиняюсь, туплю. -Z(DATA)..... это же озу, а не память программ
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|