Error 268 declaration may not appear after executable statement in block

I have just downloaded uVision v4 (sept 09) and am using the following code: #include #define LED (1<<0) // PA0 #define INPUT_PIN (1<<1)

This discussion has been locked.

You can no longer post new replies to this discussion. If you have a question you can start a new discussion

I have just downloaded uVision v4 (sept 09) and am using the
following code:

#include <AT91SAM7S256.h>

#define LED            (1<<0)   // PA0
#define INPUT_PIN      (1<<1)   // PA1
#define INT_PIN        (1<<2)   // PA2

static void initialize( void);

int main(void)
{
  volatile long input;
  initialize();

  volatile AT91PS_PIO pPIOA = AT91C_BASE_PIOA;

  while(1)
   {

    input = pPIOA->PIO_PDSR;          //for debugging.  Watch input variable to check if inputs working.


    pPIOA->PIO_CODR = LED;
    pPIOA->PIO_CODR = 0x01;

    pPIOA->PIO_SODR = LED;
  }
}

static void initialize(void)
{
  //Turn on the peripheral clock.  Without this on, inputs do not actually register in the PDSR register
  volatile AT91PS_PMC   pPMC = AT91C_BASE_PMC;                  // pointer to PMC data structure
  pPMC->PMC_PCER = (1<<AT91C_ID_PIOA);                         // enable Timer0 peripheral clock

  volatile AT91PS_PIO pPIOA = AT91C_BASE_PIOA;
  pPIOA->PIO_PER = (LED | INPUT_PIN);         // Set PIO to control LED and button.
  // Initialize Input
  pPIOA->PIO_ODR = INPUT_PIN ;                // Disable outputs for INPUT pins. (not needed as all pins default input on reset)
  pPIOA->PIO_PPUER = INPUT_PIN;               //Pullup Enable (not needed as all pullups are enabled on reset)

  // Initialize Output
  pPIOA->PIO_OER = LED;                      // Enable output for LED.
  pPIOA->PIO_SODR = LED;                     // Turn LED off.
  pPIOA->PIO_PPUDR = LED;                    //Pullup disable
}




and it throws up the following compile error:

main.c(14): error: #268: declaration may not appear after
executable statement in block

with lines:

volatile AT91PS_PIO pPIOA = AT91C_BASE_PIOA;

and:

volatile AT91PS_PIO pPIOA = AT91C_BASE_PIOA;

What am I doing wrong. It compiles OK with my other compiler.

Please let me know

  • Andy Neil

    main.c(14): error: #268: declaration may not appear after executable statement in block
    

    «What am I doing wrong»

    You are doing what the message tells you that you may
    not
    do!

    So don’t do it!

    If A may not appear after B, then where must
    B appear relative to A…?

    Remember that ANSI ‘C’ is not quite the same as C++ in this
    respect…

Сегодня, в процессе рассмотрения STM32, я нашел предыдущую проблему, я решил ее раньше, теперь я забыл, поэтому я буду отсортировать это здесь.

После определения Void Led_init (void) в LED.C и LED.h, если вы вызовите Led_init () в основной функции, вы не можете добавить параметр void, в противном случае ошибка возникает в теме, эта ошибка является объявлением Переменная не может быть размещена за исполняемым оператором, и переменная должна быть запущена в начале основной функции. Другими словами, если светодиод инициализируется в форме Void Led_init (void) в основной функции, система сделает декларацию функции LED_INIT (), которая неверна в теме.

/*main.c*/
int main(void)
{        
	Void led_init (void); // инициализируя светодиод 
}


main.c(42): error:  #268: declaration may not appear after executable statement in block
                         Void led_init (void); // инициализируя светодиод 


/*led.h*/

#ifndef __LED_H
#define __LED_H

void led_init(void);

#endif

Аналогичным образом, для функции delay_init, когда он определяется в задержке.c, это задержка_инит (168), когда он инициализируется в основной функции, в противном случае это будет по умолчанию. Декларация функции сообщит об ошибке.

Форум РадиоКот • Просмотр темы — STM32 новичку в ARM что к чему

Сообщения без ответов | Активные темы

ПРЯМО СЕЙЧАС:

Автор Сообщение

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Пт окт 13, 2017 11:59:55 

Друг Кота
Аватар пользователя

Карма: 32

Рейтинг сообщений: 482

Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832

Рейтинг сообщения: 1

Цитата:

в чем принципиальное отличие external clock mode 1 от external clock mode 2

подробно расписано в AN4776 Application note General-purpose timer cookbook
Изображение

Вернуться наверх
 

ПрофильПрофиль

 

Реклама

baghear

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Пт окт 13, 2017 13:20:19 

Опытный кот
Аватар пользователя

Карма: 7

Рейтинг сообщений: 48

Зарегистрирован: Вт июн 17, 2014 00:34:26
Сообщений: 791

Рейтинг сообщения: 0

Вернуться наверх
Реклама

black_lizard

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Вс окт 15, 2017 00:16:08 

Встал на лапы
Аватар пользователя

Зарегистрирован: Вс сен 23, 2012 05:51:35
Сообщений: 132

Рейтинг сообщения: 0

Ребят. Подскажите, что я делаю не так. Пытаюсь инициализировать прерывания от ноги мк. Камень f103. Не переходит в обработчик.

Код:

   

  //Init GPIOB 10 & 11
  GPIO_InitTypeDef  GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

        EXTI_InitTypeDef EXTI_InitStructure;
  NVIC_InitTypeDef NVIC_InitStructure;

     //Configure EXTI Line130
  EXTI_InitStructure.EXTI_Line = EXTI_Line10;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;   
  EXTI_Init(&EXTI_InitStructure);

  //Enable and set EXTI15_10 Interrupt
  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

        NVIC_EnableIRQ(EXTI15_10_IRQn);

Код:

void EXTI15_10_IRQHandler(void)
{
   addSym(‘!’, BINARY(00111111), BINARY(00000000));
}

Добавлено after 50 minutes 30 seconds:
Поправочка — прерывания заработали. Но только на GPIOA почему-то, на GPIOB никак не реагирует :c


_________________
Собираю самопальный мини-компьютер

Вернуться наверх

dosikus

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Вс окт 15, 2017 09:14:12 

Друг Кота
Аватар пользователя

Карма: 30

Рейтинг сообщений: 154

Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604

Рейтинг сообщения: 0

Но только на GPIOA почему-то, на GPIOB никак не реагирует :c

Потому , что надо вместо бездумного тыканья в SPL, научиться читать документацию:

Изображение Изображение [url=http://radikal.ru]Изображение[/url

Вернуться наверх
Реклама

Выгодные LED-драйверы для решения любых задач

КОМПЭЛ представляет со склада и под заказ широкий выбор LED-драйверов производства MEAN WELL, MOSO, Snappy, Inventronics, EagleRise. Линейки LED-драйверов этих компаний, выполненные по технологии Tunable White и имеющие возможность непосредственного встраивания в систему умного дома (димминг по шине KNX), перекрывают практически полный спектр применений: от простых световых указателей и декоративной подсветки до диммируемых по различным протоколам светильников внутреннего и наружного освещения.

Подобрать LED-драйвер>>

Koret

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Чт ноя 02, 2017 10:11:53 

Зарегистрирован: Пн окт 30, 2017 15:32:31
Сообщений: 6

Рейтинг сообщения: 0

Ребята, не могу найти характеристики ОУ в STM32, не подскажите, где взять? Надо амперметр сделать, падение на шунте 3-10мВ, вот и думаю, необходимо ли отдельный ОУ ставить, например, LM358 или встроенного хватит?

Вернуться наверх
Реклама

Реклама

LIMF – источники питания High-End от MORNSUN со стандартным функционалом на DIN-рейку

На склад Компэл поступили ИП MORNSUN (крепление на DIN-рейку) с выходной мощностью 240 и 480 Вт. Данные источники питания обладают 150% перегрузочной способностью, активной схемой коррекции коэффициента мощности (ККМ; PFC), наличием сухого контакта реле для контроля работоспособности (DC OK) и возможностью подстройки выходного напряжения. Источники питания выполнены в металлическом корпусе, ПП с компонентами покрыта лаком с двух сторон, что делает ее устойчивой к соляному туману и пыли. Изделия соответствуют требованиям ANSI/ISA 71.04-2013 G3 на устойчивость к коррозии, а также нормам ATEX для взрывоопасных зон.

Подробнее>>

Fusion

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Пт ноя 03, 2017 18:22:58 

Грызет канифоль
Аватар пользователя

Карма: 6

Рейтинг сообщений: 200

Зарегистрирован: Пт ноя 13, 2009 10:39:32
Сообщений: 267
Откуда: Москва

Рейтинг сообщения: 0

В даташите. Вот для STM32F303:

0.5 mA output capability
Rail-to-rail input/output
Bandwidth 8.2 MHz
Slew rate 4.7 V/μs
Resistive load 4 kΩ
Capacitive load 50 pF
Max. Input offset voltage 3 mV

Вернуться наверх

Jman

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Чт ноя 16, 2017 21:13:55 

Мучитель микросхем
Аватар пользователя

Карма: 4

Рейтинг сообщений: 15

Зарегистрирован: Ср янв 26, 2011 13:43:30
Сообщений: 414
Откуда: С того берега моря

Рейтинг сообщения: 0

Привет ребята. Пробую тикать таймерами и использовать прерывания на STM32VLDiscovery. Взял код с сайта(не знаю, можно линк или нет, robocraft в общем), пытаюсь скомпилировать в Keil и он выдает две ошибки:

Цитата:

main.c(29): error: #268: declaration may not appear after executable statement in block
GPIO_InitTypeDef gpio;
main.c(45): error: #268: declaration may not appear after executable statement in block
TIM_TimeBaseInitTypeDef base_timer;

Как будто не в том месте объявлены.

Вот сам код.

Код:

#include <stm32f10x.h>
#include <stm32f10x_gpio.h>
#include <stm32f10x_rcc.h>
/* В этом файле — всё для работы с таймерами */
#include <stm32f10x_tim.h>
/* В этом — для работы с NVIC */
#include <misc.h>

enum { BLUE_LED = GPIO_Pin_8, GREEN_LED = GPIO_Pin_9 };

void init_leds();
void init_timer();

int main()
{
  init_leds();
  GPIO_SetBits(GPIOC, BLUE_LED);
  GPIO_ResetBits(GPIOC, GREEN_LED);

  init_timer();

  do __NOP(); while (1);
}

void init_leds()
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

  GPIO_InitTypeDef gpio;
  GPIO_StructInit(&gpio);
  gpio.GPIO_Mode = GPIO_Mode_Out_PP;
  gpio.GPIO_Pin = BLUE_LED | GREEN_LED;
  GPIO_Init(GPIOC, &gpio);
}

void init_timer()
{
  /* Не забываем затактировать таймер */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);

  /* Инициализируем базовый таймер: делитель 24000, период 500 мс.
   * Другие параметры структуры TIM_TimeBaseInitTypeDef
   * не имеют смысла для базовых таймеров.
   */
  TIM_TimeBaseInitTypeDef base_timer;
  TIM_TimeBaseStructInit(&base_timer);
  /* Делитель учитывается как TIM_Prescaler + 1, поэтому отнимаем 1 */
  base_timer.TIM_Prescaler = 24000 — 1;
  base_timer.TIM_Period = 500;
  TIM_TimeBaseInit(TIM6, &base_timer);

  /* Разрешаем прерывание по обновлению (в данном случае —
   * по переполнению) счётчика таймера TIM6.
   */
  TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);
  /* Включаем таймер */
  TIM_Cmd(TIM6, ENABLE);

  /* Разрешаем обработку прерывания по переполнению счётчика
   * таймера TIM6. Так получилось, что это же прерывание
   * отвечает и за опустошение ЦАП.
   */
  NVIC_EnableIRQ(TIM6_DAC_IRQn);
}

void TIM6_DAC_IRQHandler()
{
  /* Так как этот обработчик вызывается и для ЦАП, нужно проверять,
   * произошло ли прерывание по переполнению счётчика таймера TIM6.
   */
  if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)
  {
    /* Очищаем бит обрабатываемого прерывания */
    TIM_ClearITPendingBit(TIM6, TIM_IT_Update);
    /* Инвертируем состояние светодиодов */
    GPIO_Write(GPIOC, GPIO_ReadOutputData(GPIOC) ^ (BLUE_LED | GREEN_LED));
  }
}

Я попробовал инициализацию структур порта и таймеров вытащить за мейн глобально. Но там посыпались другие ошибки…


_________________
— Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует!

Вернуться наверх

uldemir

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Чт ноя 16, 2017 21:24:44 

Друг Кота
Аватар пользователя

Карма: 46

Рейтинг сообщений: 1310

Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7122
Откуда: 845-й км.

Рейтинг сообщения: 1

Медали: 1

Получил миской по аватаре (1)

29-ю строчку подними на 2 строки вверх, а 45-ю на 6


_________________
А люди посмотрят и скажут: «Собаки летят. Вот и осень.»

Вернуться наверх

Jman

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Чт ноя 16, 2017 21:29:49 

Мучитель микросхем
Аватар пользователя

Карма: 4

Рейтинг сообщений: 15

Зарегистрирован: Ср янв 26, 2011 13:43:30
Сообщений: 414
Откуда: С того берега моря

Рейтинг сообщения: 0

Ну да, порт тактируем до инита, и таймер так же.

Теперь посыпалось такое:

Код:

.Objectstimer_example.axf: Error: L6218E: Undefined symbol TIM_ClearITPendingBit (referred from main.o).
.Objectstimer_example.axf: Error: L6218E: Undefined symbol TIM_Cmd (referred from main.o).
.Objectstimer_example.axf: Error: L6218E: Undefined symbol TIM_GetITStatus (referred from main.o).
.Objectstimer_example.axf: Error: L6218E: Undefined symbol TIM_ITConfig (referred from main.o).
.Objectstimer_example.axf: Error: L6218E: Undefined symbol TIM_TimeBaseInit (referred from main.o).
.Objectstimer_example.axf: Error: L6218E: Undefined symbol TIM_TimeBaseStructInit (referred from main.o).


_________________
— Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует!

Вернуться наверх

uldemir

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Чт ноя 16, 2017 21:56:55 

Друг Кота
Аватар пользователя

Карма: 46

Рейтинг сообщений: 1310

Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7122
Откуда: 845-й км.

Рейтинг сообщения: 0

Медали: 1

Получил миской по аватаре (1)

Ну да, порт тактируем до инита, и таймер так же.

Нет. переменные должны быть объявлены до кодогенеррмрующих команд, а не где попадя.
А дальнейшие ошибки сообщают об остутствии функций которые вы вызываете. Тут уж вам надо найти где нужные библиотеки и подключить их.


_________________
А люди посмотрят и скажут: «Собаки летят. Вот и осень.»

Вернуться наверх

Jman

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Пт ноя 17, 2017 10:50:32 

Мучитель микросхем
Аватар пользователя

Карма: 4

Рейтинг сообщений: 15

Зарегистрирован: Ср янв 26, 2011 13:43:30
Сообщений: 414
Откуда: С того берега моря

Рейтинг сообщения: 0

Спасибо, просто забыл в spl галочку в TIM установить.


_________________
— Бежит этот подлец-электрон, а вокруг его масса (аж 10 в 23й) штук ионов кремния и 10 в 15й ионов примеси и он, подлец, взаимодействует!

Вернуться наверх

prinv

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Пн ноя 20, 2017 10:57:01 

Вымогатель припоя
Аватар пользователя

Карма: 7

Рейтинг сообщений: 58

Зарегистрирован: Чт янв 20, 2011 09:07:08
Сообщений: 665
Откуда: Пермь

Рейтинг сообщения: 0

Такая проблема: есть STM32VLDISCOVERY с МК STM32F100RBT6B, а также есть Pinboard II c МК STM32F103C8T6 (ситуация в обоих вариантах одинаковая). При HCLK больше 12-16МГц некоторые устройства с шиной I²С не работают. Обращаю внимание, что не все устройства себя так ведут. Например, работают на любой частоте микросхемы DS3231 и DS1307 и отваливаются при повышении частоты RDA5807M и MPU-6050.
В чём может быть дело? Изменение скорости I²С (100-400 КГц) влияния не оказывает.
Keil 5.24a, STM32CubeMX 4.23.0, HAL.


_________________
Никакая контра не уйдёт от нас

Вернуться наверх

Hardegen

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Пт ноя 24, 2017 01:30:44 

Карма: 3

Рейтинг сообщений: 3

Зарегистрирован: Вт мар 28, 2017 12:32:15
Сообщений: 16

Рейтинг сообщения: 0

Вернуться наверх

sawa330

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Вс ноя 26, 2017 23:14:44 

Встал на лапы
Аватар пользователя

Карма: 1

Рейтинг сообщений: 6

Зарегистрирован: Пт дек 28, 2012 04:41:38
Сообщений: 135

Рейтинг сообщения: 0

Други помоЖите кто чем может….!?
Есть код написанный под какие то библиотеки вот он

Код:

// Функция для реализации задержки

void MT_Delay(uint32_t us)
{
volatile uint32_t i;
RCC_ClocksTypeDef rcc;

RCC_GetClocksFreq (&rcc);
i = (rcc.HCLK_Frequency/10000000)*us;

for (; i != 0; i—);
}

Мне требА это самое реализовать по под халловские библиотеки…. у самого чёт нибельмеса не получается… КЕЙЛИ 5 выдаёт ошибку
«идентификатор «RCC_ClocksTypeDef» неопределен RCC_ClocksTypeDef rcc;» — что в принципе правильно(библиотеки то не те…)
Попробовал повыдёргивать со своего «STM32F1xx_HAL_RCC_H» ничего не получилось. Лучшее что получилось это такая ошибка —

«7878.axf: Error: L6218E: Undefined symbol RCC_OscInitStruct (referred from main.o).
Not enough information to list image symbols.
Not enough information to list load addresses in the image map.»

Помогите пожалуйста
вот часть моего файла «STM32F1xx_HAL_RCC_H»

Код:

/* Peripheral Control functions  ************************************************/
void              HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_MCODiv);
void              HAL_RCC_EnableCSS(void);
void              HAL_RCC_DisableCSS(void);
uint32_t          HAL_RCC_GetSysClockFreq(void);
uint32_t          HAL_RCC_GetHCLKFreq(void);
uint32_t          HAL_RCC_GetPCLK1Freq(void);
uint32_t          HAL_RCC_GetPCLK2Freq(void);
void              HAL_RCC_GetOscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct);
void              HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef  *RCC_ClkInitStruct, uint32_t *pFLatency);

/** @defgroup RCC_System_Clock_Type System Clock Type
  * @{
  */
#define RCC_CLOCKTYPE_SYSCLK             0x00000001U /*!< SYSCLK to configure */
#define RCC_CLOCKTYPE_HCLK               0x00000002U /*!< HCLK to configure */
#define RCC_CLOCKTYPE_PCLK1              0x00000004U /*!< PCLK1 to configure */
#define RCC_CLOCKTYPE_PCLK2              0x00000008U /*!< PCLK2 to configure */

/**
  * @}
  */

/** @defgroup RCC_System_Clock_Source System Clock Source
  * @{
  */
#define RCC_SYSCLKSOURCE_HSI             RCC_CFGR_SW_HSI /*!< HSI selected as system clock */
#define RCC_SYSCLKSOURCE_HSE             RCC_CFGR_SW_HSE /*!< HSE selected as system clock */
#define RCC_SYSCLKSOURCE_PLLCLK          RCC_CFGR_SW_PLL /*!< PLL selected as system clock */

Вернуться наверх

AndTer

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Пн ноя 27, 2017 00:53:51 

Поставщик валерьянки для Кота
Аватар пользователя

Карма: 41

Рейтинг сообщений: 1207

Зарегистрирован: Ср фев 23, 2011 12:12:31
Сообщений: 2321

Рейтинг сообщения: 0

Медали: 1

Получил миской по аватаре (1)

Банальная задержка.
Рассчитываем значение i, сколько должно быть «тиков» ядра, чтобы задержка была нужное количество миллисекунд. И дальше их «тикаем».
Найти в сети хал код на подобное и вставить в тело функции.
Вообще слабо представляю уровень программиста, который писал задержку путём полного загруза МК… Он ничего не может делать в это время. А если прерывание произойдёт? Задержка уплывёт… В общем… Может не стоит оно?


_________________
Глупый не задает вопросы. Глупый и так все знает.

Вернуться наверх

Мурик

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Пн ноя 27, 2017 12:32:49 

Друг Кота
Аватар пользователя

Карма: 1

Рейтинг сообщений: 157

Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3313

Рейтинг сообщения: 0

В HAL есть функция задержки. Называется HAL_Delay.

Вернуться наверх

AndTer

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Пн ноя 27, 2017 13:14:06 

Поставщик валерьянки для Кота
Аватар пользователя

Карма: 41

Рейтинг сообщений: 1207

Зарегистрирован: Ср фев 23, 2011 12:12:31
Сообщений: 2321

Рейтинг сообщения: 0

Медали: 1

Получил миской по аватаре (1)

HAL_Delay

Только выдаёт она +/- километр. И ещё в добавок она делает задержку в миллисекундах.

В Keil можно написать так:

Код:

void MT_Delay(uint32_t us)
{
volatile uint32_t i;

i = (SystemCoreClock/10000000)*us;

for (; i != 0; i—);
}

Или так красивее и меньше переменных:

Код:

void MT_Delay(uint32_t us)
{
us = (SystemCoreClock / 10000000)*us;
while (us—) ;
}

Но задержка будет неверная. Нельзя от неё ждать микросекунд. Процентов на 10-20 соврёт. Можно скорректировать путём измерения частоты на ножке МК. Делить не на 10000000, а например на 9000000.
Впрочем, если прерывания вылезут, то ещё больше уплывёт и это не скорректировать.

Делать стоит всё же на таймере.


_________________
Глупый не задает вопросы. Глупый и так все знает.

Вернуться наверх

sawa330

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Пн ноя 27, 2017 16:56:51 

Встал на лапы
Аватар пользователя

Карма: 1

Рейтинг сообщений: 6

Зарегистрирован: Пт дек 28, 2012 04:41:38
Сообщений: 135

Рейтинг сообщения: 0

Спасибо! Будем пробовать…..

Вернуться наверх

pokk

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Ср ноя 29, 2017 11:57:34 

Зарегистрирован: Вт ноя 02, 2010 17:46:37
Сообщений: 574

Рейтинг сообщения: 0

Как сделать грамотно ассемблерную вставку ?
в общем, нагуглил, что есть такая полезная команда как CLZ в Cortex-M3, поиском по файликам не нашел и решали сделать сам.

Код:

uint8_t  __CLZ_MY(uint32_t __count)
{
   asm volatile («clz r0, r0»);
}

После того как сделал компилятор начал ругаться что она уже есть :facepalm: в intrinsics.h
но там только описание, саму реализацию так и не нашел.

Код:

/* Architecture v5T, CLZ is also available in Thumb mode for Thumb2 cores */
__ATTRIBUTES unsigned char __CLZ( unsigned long );

В общем как правильно вернуть параметр?

Вернуться наверх

Reflector

Не в сети

Заголовок сообщения: Re: STM32 новичку в ARM что к чему

СообщениеДобавлено: Ср ноя 29, 2017 12:14:41 

Поставщик валерьянки для Кота

Карма: 20

Рейтинг сообщений: 251

Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 1950

Рейтинг сообщения: 0

В общем как правильно вернуть параметр?

Найти в том же cmsis любую что-то возвращающую функцию использующую ассм вставки, их там предостаточно.

Вернуться наверх

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account

Labels

compatibility

Some compilers/environments do not give the expected result

Comments

@suilin1254703825

Under the scenario using LLVM for cross-compilation, «Error: #268: Declaration may not Appear after Executable Statement in block» will be prompted. It is recommended that variables be declared in advance at the beginning.
For example:

// old:
void sha256_read(const struct sha256_buff *buff, uint8_t *hash)
{
    for (uint32_t i = 0; i < 8; i++)
    {
        hash[i * 4] = (buff->h[i] >> 24) & 255;
        hash[i * 4 + 1] = (buff->h[i] >> 16) & 255;
        hash[i * 4 + 2] = (buff->h[i] >> 8) & 255;
        hash[i * 4 + 3] = buff->h[i] & 255;
    }
}

// new 
void sha256_read(const struct sha256_buff *buff, uint8_t *hash)
{
    uint32_t i = 0;
    for (/*uint32_t*/ i = 0; i < 8; i++)
    {
        hash[i * 4] = (buff->h[i] >> 24) & 255;
        hash[i * 4 + 1] = (buff->h[i] >> 16) & 255;
        hash[i * 4 + 2] = (buff->h[i] >> 8) & 255;
        hash[i * 4 + 3] = buff->h[i] & 255;
    }
}

@LekKit

Thanks, I wasn’t aware my code isn’t C89 compliant (compilers that I’ve used for testing enable C99 by default, my bad), the issue is fixed in 8b1f77b — tested with -std=c89, but report if you have additional issues

@suilin1254703825

I’m sorry,My label is not very accurate, thank you.

Labels

compatibility

Some compilers/environments do not give the expected result

2 participants

@suilin1254703825

@LekKit

Автор

Лом_2 · Опубликовано 33 минуты назад

Итак. Поступила просьба столкнуть две модели лбом. Стоковую и «улучшенную».

Модели были перенесены на один лист, в обеих выставлен ток покоя — 5мА.

Подаём меандр, видим такое, зелёная сток, сиреневая «улучшенная»:

Стоковый усилитель- неустойчив, модель не учитывает паразиты печатного монтажа, поэтому нужно было бы подстроить «дифференцирующую цепочку», но я не стал. Пусть как есть.

Теперь устраиваем моделям режим ограничения:

картина — аналогичная по смыслу. В обоих случаях входные фильтры — отключены, выходной сигнал снимается ДО катушки. Ради интереса подал меандр «улучшенной модели» прям в «точку сравнения», однако она и такое издевательство проигнорировала , возбуда- нет.

Теперь сравним ИМД, входные фильтры — на месте, выходной сигнал снимаем после катушки:

Опять зелёный сток, сиреневый- «улучшенная».

Всё вместе показывает вполне себе осмысленную эффективность апгрейда.

Модель двойную- прилагаю:

Deep_OOS_X2.asc

tags: study  study

Check C99 MODE

If there is no C99 Mode option, then we can include the code with braces so that compilation will not report an error.

 1 if( (! bMemAddrAllowAccess(checkAddr) ))
 2    {
 3       diag_printf("nraddr not allowednr");
 4       return;
 5    }
 6    {//Pay attention to the braces here
 7       int *p = (int *)addr;
 8       
 9       if(andvalue_set)
10       { *p &= andvalue; }
11       
12       if(orvalue_set)
13       { *p |= orvalue; }
14 
15       diag_printf("rn0x%xrn",*p);
16    }//Pay attention to the braces here

Intelligent Recommendation

Java variable declaration and assignment

8 basic type variables in Java, getJava 11 has new syntax after support Basic data type has 8 kinds Integer type: Byte, Short, Int and long Different types: float and double Character type: char Boole…

Oracle declare error

Oracle always reports an error when using declare: PLS-00103: Encountered the symbol «end-of-file» when expecting one of the following. The final discovery is that Oracle uses declare to dec…

More Recommendation

A situation that causes KEIL error #20

> Description   <+> The environment is KEIL5.20 & STM32F429 project, the platform is win10   <+> The prototype of the structure is as follows   <+> The reference type source f…

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Error 268 473 cannot find a suitable display mode
  • Error 266 was returned by winverifytrust
  • Error 266 roblox что это
  • Error 263 for command close audio mp3
  • Error 262 roblox

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии