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

 
 
> IAR for 8051, объявление массива
WHALE
сообщение Jul 15 2015, 12:06
Сообщение #1


Знающий
****

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



Не понимаю, что от меня хочет компилятор.
Код
#ifndef FLASH
  #define FLASH _Pragma("location=\"FLASH\"")
   #endif
FLASH  const unsigned char UART_BUFFERSIZE = 8;
  unsigned char UART1_RX_Buffer[UART_BUFFERSIZE];

Error[Pe028]: expression must have a constant value D:\PROGEKTS\microcontrollers\C8051\Silabs\No_RTOS\TEST\SRC\main.c 10
на строке с объявлением буффера UART1_RX_Buffer.
На IAR-е для AVR и для ARM все нормально.
Как объяснить компилятору, что UART_BUFFERSIZE таки является константой?



--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Jul 15 2015, 12:14
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (WHALE @ Jul 15 2015, 15:06) *
Как объяснить компилятору, что UART_BUFFERSIZE таки является константой?

Написать вменяемый и понятный как компилятору, так и человеку текст, а не то умопомрачение, которое Вы наваляли.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
WHALE
сообщение Jul 15 2015, 12:27
Сообщение #3


Знающий
****

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



Цитата(zltigo @ Jul 15 2015, 16:14) *
Написать вменяемый и понятный как компилятору, так и человеку текст, а не то умопомрачение, которое Вы наваляли.

эээ... а чуть-чуть развернуть вашу мысль можете?В смысле с примером правильного объявления.





--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 15 2015, 12:33
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (WHALE @ Jul 15 2015, 15:27) *
эээ... а чуть-чуть развернуть вашу мысль можете?В смысле с примером правильного объявления.

CODE
#define UART_BUFFERSIZE (8)
FLASH  const unsigned char uart_buffersize = UART_BUFFERSIZE;
unsigned char UART1_RX_Buffer[UART_BUFFERSIZE];

Остался только вопрос, а на кой вообще иметь эту 'uart_buffersize' константу в памяти.
Поскольку ответить, полагаю, не сможете, то тогда так:
CODE
#define UART_BUFFERSIZE (8)
unsigned char UART1_RX_Buffer[UART_BUFFERSIZE];


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
WHALE
сообщение Jul 15 2015, 12:50
Сообщение #5


Знающий
****

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



Цитата(zltigo @ Jul 15 2015, 16:33) *
Остался только вопрос, а на кой вообще иметь эту 'uart_buffersize' константу в памяти.
Поскольку ответить, полагаю, не сможете, то тогда так:
Код
#define UART_BUFFERSIZE (8)
unsigned char UART1_RX_Buffer[UART_BUFFERSIZE];


Ну попытаюсь ответить.. Вроде в умных книжках пишут что лучше где возможно обхо-
диться без макросов и препроцессор не обеспечивает проверку типов.
И все-таки почему такие-же объявления работают в IAR for AVR и IAR for ARM и не проходят
в IAR for 8051. Почему компилятор не считает константой переменную объявленную как const и
лежащую во флэши?



--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 16:21
Рейтинг@Mail.ru


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