Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

Почему Keil "недоволен"?

Непрочитано 20.11.2019, 11:02  
vladh
Почётный гражданин KAZUS.RUN
 
Регистрация: 03.12.2004
Сообщений: 1,311
Сказал спасибо: 353
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
vladh на пути к лучшему
По умолчанию Почему Keil "недоволен"?

Уважаемые, подскажите. Работаю в Кейле. Пытаюсь создать массив в котором хочу сохранять параметры работы моего изделия. Вначале объявляю массив:
uint16_t param[32];
В следующей строке начинаю определять элементы массива:
uint16_t param[0]=0x10;
но компилятор мне пишет:"ошибка 144, значение типа " int " не может использоваться для инициализации записи типа uint16_t param[32]".
Я никак не могу въехать, что в моей записи неверно.
Реклама:
vladh вне форума  
Непрочитано 20.11.2019, 11:23  
Ivan_fd
Прописка
 
Регистрация: 04.02.2007
Адрес: Украина
Сообщений: 126
Сказал спасибо: 44
Сказали Спасибо 29 раз(а) в 20 сообщении(ях)
Ivan_fd на пути к лучшему
По умолчанию Re: Почему Keil "недоволен"?

Может использовать приведение типов?

Да и зачем Вы, когда определяете элементы массива, опять пишете его тип?

uint16_t param[0]=0x10;
Ivan_fd вне форума  
Непрочитано 20.11.2019, 11:26  
dgrishin
Почётный гражданин KAZUS.RUN
 
Регистрация: 12.02.2013
Адрес: На болотах
Сообщений: 1,164
Сказал спасибо: 46
Сказали Спасибо 315 раз(а) в 244 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: Почему Keil "недоволен"?

Сообщение от vladh Посмотреть сообщение
Я никак не могу въехать, что в моей записи неверно.

Вы дважды определяете массив c одним именем.

Правильнее было бы
uint16_t param[32] = {0x10, и т. д. };
dgrishin вне форума  
Непрочитано 20.11.2019, 11:49  
vladh
Почётный гражданин KAZUS.RUN
 
Регистрация: 03.12.2004
Сообщений: 1,311
Сказал спасибо: 353
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
vladh на пути к лучшему
По умолчанию Re: Почему Keil "недоволен"?

Сообщение от Ivan_fd Посмотреть сообщение
Может использовать приведение типов?

Да и зачем Вы, когда определяете элементы массива, опять пишете его тип?

uint16_t param[0]=0x10;
Я, к сожалению, не знаю, что такое приведение типов. А то что я при определении значения вновь указал тип, то это автоматом. Вот узнал, что надо делать правильно так:
uint16_t param[32];
void init_array()
{
param[0]=1;
param[1]=0;
....
}
vladh вне форума  
Непрочитано 20.11.2019, 11:51  
vladh
Почётный гражданин KAZUS.RUN
 
Регистрация: 03.12.2004
Сообщений: 1,311
Сказал спасибо: 353
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
vladh на пути к лучшему
По умолчанию Re: Почему Keil "недоволен"?

Сообщение от dgrishin Посмотреть сообщение
Вы дважды определяете массив c одним именем.

Правильнее было бы
uint16_t param[32] = {0x10, и т. д. };
Так тоже не проходит.
vladh вне форума  
Непрочитано 20.11.2019, 12:37  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Почему Keil "недоволен"?

Сообщение от vladh Посмотреть сообщение
Работаю в Кейле
В каком? В 5.2х не встречался с таким.
Сообщение от vladh Посмотреть сообщение
uint16_t param[0]=0x10;
но компилятор мне пишет:"ошибка 144, значение типа " int " не может использоваться для инициализации записи типа uint16_t param[32]".
Попробуйте
param[0]=(uint16_t)0x10;
это будет явное указание компилятору, что значение не "int". Так должно пройти.

Сообщение от dgrishin Посмотреть сообщение
Вы дважды определяете массив c одним именем.
Без значений - объявление, а "определение" - задание определенных значений. Но компилятор может и не делать разницы на уровне "правописания", а просто вывалить ошибку. Многие перед переменной ставят тип с целью борьбы со склерозом, только нужно это делать по типу "явного преобразования типа", т.е., помещать в скобки. Тогда ругани не будет.

ПС Указание типа перед именем переменной - объявление/определение и правильно Кейл бычится. А вот описание ошибки не всегда бывает корректным.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.

Последний раз редактировалось akegor; 20.11.2019 в 12:40.
akegor вне форума  
Непрочитано 20.11.2019, 12:50  
vladh
Почётный гражданин KAZUS.RUN
 
Регистрация: 03.12.2004
Сообщений: 1,311
Сказал спасибо: 353
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
vladh на пути к лучшему
По умолчанию Re: Почему Keil "недоволен"?

Сообщение от akegor Посмотреть сообщение
В каком? В 5.2х не встречался с таким.
5.28
"Попробуйте
param[0]=(uint16_t)0x10;
это будет явное указание компилятору, что значение не "int". Так должно пройти."
Попробовал. Кейл выдал кучу ошибок.
А вот то, что я указал на тип и в объявлении и в определении Кейл выдал не ошибку, а замечание.

Последний раз редактировалось vladh; 20.11.2019 в 12:53.
vladh вне форума  
Непрочитано 20.11.2019, 13:23  
akegor
Гуру портала
 
Аватар для akegor
 
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 19,313
Сказал спасибо: 2,633
Сказали Спасибо 12,076 раз(а) в 6,082 сообщении(ях)
akegor на пути к лучшему
По умолчанию Re: Почему Keil "недоволен"?

Сообщение от vladh Посмотреть сообщение
Кейл выдал не ошибку, а замечание.
Тоже "не айс". Есть элемент непредсказуемости результата.
Сообщение от vladh Посмотреть сообщение
Кейл выдал кучу ошибок.
Значит, посчитал, что "не царское это дело - присваивать значения элементам массива на этапе компиляции".
Странно, что не хочет определять массив, допускает только объявление.
Нет сейчас Кайла под рукой - систему переустанавливаю, переначиняю, перенастраиваю... Проверил бы в 5.23
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
akegor вне форума  
Непрочитано 20.11.2019, 13:52  
vladh
Почётный гражданин KAZUS.RUN
 
Регистрация: 03.12.2004
Сообщений: 1,311
Сказал спасибо: 353
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
vladh на пути к лучшему
По умолчанию Re: Почему Keil "недоволен"?

Я ранее вот так определял:
uint16_t param[32]={0x10,0x11,0x12};
Но почему то сейчас решил сделать по другому.
vladh вне форума  
Непрочитано 20.11.2019, 14:05  
vladh
Почётный гражданин KAZUS.RUN
 
Регистрация: 03.12.2004
Сообщений: 1,311
Сказал спасибо: 353
Сказали Спасибо 76 раз(а) в 33 сообщении(ях)
vladh на пути к лучшему
По умолчанию Re: Почему Keil "недоволен"?

Вспомнил почему решил найти другой способ. Если определять этим способом, то строчка с значениями становится длинной и неудобочитаемой. А как сделать правильно перенос на другую строку я не знаю.
vladh вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с переходом на компилятор C/C++ v6 в Keil Donker ARM 0 26.11.2018 23:49
Keil C51 и volatile. Массив, изменяемый в обработчике прерывания - volatile? ArtemKolesnikov Микроконтроллеры, АЦП, память и т.д 3 07.01.2017 23:14
Почему дёшевы IRG4BC40 и CT30TM-8? _Cahes_ Информация по радиокомпонентам 2 23.06.2016 22:39
почему не ds18b20?? индюк Делимся опытом 20 18.05.2016 19:03
Почему не устанавливается Google Chrome Electric75 Ремонт оргтехники 20 20.09.2015 23:04


Часовой пояс GMT +4, время: 12:19.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.