Перейти к содержанию
    

Помогите с синтаксисом

Создал структуру

typedef struct
  {
    float K_Ves;        // 4 byte Вес/значение АСП 
    float Giray;        // 4 byte Калибровочный вес
  } Kalibr_Par;

Создаю указатель на структуру

uint32_t* AddressSrc = (void *)&Kalibr_Par;

На эту строчку Keil ругается. Что не так? Используется в функции 

HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, AddressDes, *(uint32_t *)AddressSrc)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, Юрий48 said:

Создал структуру

Вы создали не структуру, а тип. Или уберите typedef или создайте объект:

Kalibr_Par cal;

uint32_t* AddressSrc = (void *)&cal;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо всем. Не то, что бы полноценно осмыслил, но вот так заработало.

 typedef struct
  {
    float K_Ves;        // 4 byte Вес/значение АСП 
    float Giray;        // 4 byte Калибровочный вес
  } tpKalibr_Par;
  tpKalibr_Par Kalibr_Par;

И задавать параметры можно так

Kalibr_Par.K_Ves = 1.0;
Kalibr_Par.Giray = 10.0;

Раз уж коснулся вопросов чайника, то вот эта строка

 HAL_GPIO_WritePin(GPIOC,  GPIO_PIN_13, ! HAL_GPIO_ReadPin (GPIOB, GPIO_PIN_0)); 

работает нормально. Но Keil выдаёт предупреждение на счёт восклицательного знака. А, вот, как же правильно надо записать эту конструкцию, что бы предупреждений не было.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 часов назад, Юрий48 сказал:

Но Keil выдаёт предупреждение на счёт восклицательного знака.

Совремнная наука отрицает существование телепатии, поэтому было бы очень полезно приводить полный текст этого предупреждения. Если, конечно, вы хотите получить ответ именно на свой вопрос, а не как два предыдущих.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, mcheb said:

if((GPIOB->IDR)&(1<<0)) GPIOC->BSRR = (1<<(13+(1)*16)); else  GPIOC->BSRR = (1<<(13+(0)*16));

Это, простите, настоящий код с настоящего боевого проекта? Можно только позавидовать Вашей внимательности и усидчивости.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, Сергей Борщ said:

Совремнная наука отрицает существование телепатии, поэтому было бы очень полезно приводить полный текст этого предупреждения. Если, конечно, вы хотите получить ответ именно на свой вопрос, а не как два предыдущих.

Извините. Хочу получить ответ именно на свой вопрос, поэтому исправляюсь и вот полный текст этого предупреждения

../Src/stm32f1xx_it.c(295): warning:  #188-D: enumerated type mixed with another type

     HAL_GPIO_WritePin(GPIOC,  GPIO_PIN_13, ! HAL_GPIO_ReadPin (GPIOB, GPIO_PIN_0)); 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, esaulenka said:

Это, простите, настоящий код с настоящего боевого проекта? Можно только позавидовать Вашей внимательности и усидчивости.

Я пользуюсь макросами типа

/**BUTTON GPIO Configuration
    PB15     ------> BUTTON
*/
#define BUTTON_IS_PRESSED     !((GPIOB->IDR)&(1<<15))
#define BUTTON_NOT_PRESSED     ((GPIOB->IDR)&(1<<15))
#define BUTTONFREQ LEDFREQ
/**LED GPIO Configuration
    PC6     ------>   RED_LED
    PC7     ------> GREEN_LED
*/
#define Gled(x)         GPIOC->BSRR = (1<<(7+(1-(x))*16))
#define Rled(x)         GPIOC->BSRR = (1<<(6+(1-(x))*16))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, Юрий48 said:

../Src/stm32f1xx_it.c(295): warning:  #188-D: enumerated type mixed with another type

Подозреваю, что 3й параметр в HAL_GPIO_WritePin  какой то enum. '!' возвращает bool (или int - в зависимости от версии языка)

Явно приведите тип

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Юрий48 сказал:

../Src/stm32f1xx_it.c(295): warning:  #188-D: enumerated type mixed with another type

     HAL_GPIO_WritePin(GPIOC,  GPIO_PIN_13, ! HAL_GPIO_ReadPin (GPIOB, GPIO_PIN_0)); 

Вероятно, функция HAL_GPIO_WritePin ожидает в качестве третьего параметра какой-то свой велосипедный enum, в котором закодированы значения true и false. Про стандартный stdbool.h разработчики куба, скорее всего, не слышали. Попробуйте так:

HAL_GPIO_WritePin(GPIOC,  GPIO_PIN_13, (enum_type)(!HAL_GPIO_ReadPin (GPIOB, GPIO_PIN_0))); 

вместо enum_type подставьте тот тип, который ожидает функция HAL_GPIO_WritePin. Его вы можете увидеть в описании или в прототипе функции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Конечно телепаты уехали.

Но всегда есть книги. Когда товарищ пишет !, какую операцию он имеет в своей голове ?

И к какому выражению он её хочет применить.

Что такое ! 5 ? Пять минут подумать и ответ будет сам собой (5 это просто для примера, можно подставить 135).

Хотя 135 это тоже не просто так.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Отрывок из stm32f1xx_hal_gpio.h:

typedef enum
{
  GPIO_PIN_RESET = 0U,
  GPIO_PIN_SET
}GPIO_PinState;

...

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

...

Проще 

HAL_GPIO_WritePin(GPIOC,  GPIO_PIN_13, ! HAL_GPIO_ReadPin (GPIOB, GPIO_PIN_0));

переписать через IF...ELSE и не морочить себе голову:

state = HAL_GPIO_ReadPin (GPIOB, GPIO_PIN_0);

if (state == .... )
   HAL_GPIO_WritePin(GPIOC,  GPIO_PIN_13, .... );
else
   HAL_GPIO_WritePin(GPIOC,  GPIO_PIN_13, .... );

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, Сергей Борщ said:

Попробуйте так:


HAL_GPIO_WritePin(GPIOC,  GPIO_PIN_13, (enum_type)(!HAL_GPIO_ReadPin (GPIOB, GPIO_PIN_0))); 

вместо enum_type подставьте тот тип, который ожидает функция HAL_GPIO_WritePin. Его вы можете увидеть в описании или в прототипе функции.

Спасибо больше. Именно в таком духе и ожидал ответ. Ещё раз прошу извинений за несобранность и благодарю за снисхождение к чайникам. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...