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

 
 
> 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
Ответов
SSerge
сообщение Jul 15 2015, 15:37
Сообщение #2


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Конструкция с объявлением массива, у которого в качестве размера указана переменная или выражение в С допустима, но в общем случае такой массив будет создан во время выполнения, посредством выделения памяти из кучи.
IAR для 8051 даже позволяет такое делать если в настройках выбрать С99 и поставить галку Allow VLA, но только для локальных массивов, объявленных внутри функции.

В любом случае для 8051 подобные излишества скорее вредны чем полезны.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 15 2015, 16:48
Сообщение #3


Гуру
******

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



QUOTE (SSerge @ Jul 15 2015, 18:37) *
Конструкция с объявлением массива, у которого в качестве размера указана переменная или выражение в С допустима, но в общем случае такой массив будет создан во время выполнения, посредством выделения памяти из кучи.

Ну это Вы круто загнули sm.gif. На стеке С99 этот массив размесить сможет. Но описанный ранее случай тоже не об этом. Там простая С++ оптимизация при которой переменая была просто выкинута за ненадобностью.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post



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

 


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


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