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
-
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 что к чему
|
||
Карма: 32 Рейтинг сообщения: 1
|
Цитата: в чем принципиальное отличие external clock mode 1 от external clock mode 2 подробно расписано в AN4776 Application note General-purpose timer cookbook |
||
| Вернуться наверх |
Профиль
|
||
| Реклама | |
|
|
|
|
baghear |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
||
Карма: 7 Рейтинг сообщения: 0
|
|||
| Вернуться наверх | |||
| Реклама | |
|
|
|
|
black_lizard |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
||
Зарегистрирован: Вс сен 23, 2012 05:51:35 Рейтинг сообщения: 0
|
Ребят. Подскажите, что я делаю не так. Пытаюсь инициализировать прерывания от ноги мк. Камень f103. Не переходит в обработчик. Код: //Init GPIOB 10 & 11 EXTI_InitTypeDef EXTI_InitStructure; //Configure EXTI Line130 //Enable and set EXTI15_10 Interrupt NVIC_EnableIRQ(EXTI15_10_IRQn); Код: void EXTI15_10_IRQHandler(void) Добавлено after 50 minutes 30 seconds: |
||
| Вернуться наверх | |||
|
dosikus |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
||
Карма: 30 Рейтинг сообщения: 0
|
Но только на GPIOA почему-то, на GPIOB никак не реагирует :c Потому , что надо вместо бездумного тыканья в SPL, научиться читать документацию:
|
||
| Вернуться наверх | |||
| Реклама | |
|
Выгодные LED-драйверы для решения любых задач КОМПЭЛ представляет со склада и под заказ широкий выбор LED-драйверов производства MEAN WELL, MOSO, Snappy, Inventronics, EagleRise. Линейки LED-драйверов этих компаний, выполненные по технологии Tunable White и имеющие возможность непосредственного встраивания в систему умного дома (димминг по шине KNX), перекрывают практически полный спектр применений: от простых световых указателей и декоративной подсветки до диммируемых по различным протоколам светильников внутреннего и наружного освещения. Подобрать LED-драйвер>> |
|
Koret |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
|
Зарегистрирован: Пн окт 30, 2017 15:32:31 Рейтинг сообщения: 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 что к чему
|
||
Карма: 6 Рейтинг сообщения: 0
|
В даташите. Вот для STM32F303: 0.5 mA output capability |
||
| Вернуться наверх | |||
|
Jman |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
||
Карма: 4 Рейтинг сообщения: 0
|
Привет ребята. Пробую тикать таймерами и использовать прерывания на STM32VLDiscovery. Взял код с сайта(не знаю, можно линк или нет, robocraft в общем), пытаюсь скомпилировать в Keil и он выдает две ошибки: Цитата: main.c(29): error: #268: declaration may not appear after executable statement in block Как будто не в том месте объявлены. Вот сам код. Код: #include <stm32f10x.h> enum { BLUE_LED = GPIO_Pin_8, GREEN_LED = GPIO_Pin_9 }; void init_leds(); int main() init_timer(); do __NOP(); while (1); void init_leds() GPIO_InitTypeDef gpio; void init_timer() /* Инициализируем базовый таймер: делитель 24000, период 500 мс. /* Разрешаем прерывание по обновлению (в данном случае — /* Разрешаем обработку прерывания по переполнению счётчика void TIM6_DAC_IRQHandler() Я попробовал инициализацию структур порта и таймеров вытащить за мейн глобально. Но там посыпались другие ошибки… |
||
| Вернуться наверх | |||
|
uldemir |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
||
Карма: 46 Рейтинг сообщения: 1
|
29-ю строчку подними на 2 строки вверх, а 45-ю на 6 |
||
| Вернуться наверх | |||
|
Jman |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
||
Карма: 4 Рейтинг сообщения: 0
|
Ну да, порт тактируем до инита, и таймер так же. Теперь посыпалось такое: Код: .Objectstimer_example.axf: Error: L6218E: Undefined symbol TIM_ClearITPendingBit (referred from main.o). |
||
| Вернуться наверх | |||
|
uldemir |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
||
Карма: 46 Рейтинг сообщения: 0
|
Ну да, порт тактируем до инита, и таймер так же. Нет. переменные должны быть объявлены до кодогенеррмрующих команд, а не где попадя. |
||
| Вернуться наверх | |||
|
Jman |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
||
Карма: 4 Рейтинг сообщения: 0
|
Спасибо, просто забыл в spl галочку в TIM установить. |
||
| Вернуться наверх | |||
|
prinv |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
||
Карма: 7 Рейтинг сообщения: 0
|
Такая проблема: есть STM32VLDISCOVERY с МК STM32F100RBT6B, а также есть Pinboard II c МК STM32F103C8T6 (ситуация в обоих вариантах одинаковая). При HCLK больше 12-16МГц некоторые устройства с шиной I²С не работают. Обращаю внимание, что не все устройства себя так ведут. Например, работают на любой частоте микросхемы DS3231 и DS1307 и отваливаются при повышении частоты RDA5807M и MPU-6050. |
||
| Вернуться наверх | |||
|
Hardegen |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
|
Карма: 3 Рейтинг сообщения: 0
|
|
| Вернуться наверх | |
|
sawa330 |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
||
Карма: 1 Рейтинг сообщения: 0
|
Други помоЖите кто чем может….!? Код: // Функция для реализации задержки void MT_Delay(uint32_t us) RCC_GetClocksFreq (&rcc); for (; i != 0; i—); Мне требА это самое реализовать по под халловские библиотеки…. у самого чёт нибельмеса не получается… КЕЙЛИ 5 выдаёт ошибку «7878.axf: Error: L6218E: Undefined symbol RCC_OscInitStruct (referred from main.o). Помогите пожалуйста Код: /* Peripheral Control functions ************************************************/ /** @defgroup RCC_System_Clock_Type System Clock Type /** /** @defgroup RCC_System_Clock_Source System Clock Source |
||
| Вернуться наверх | |||
|
AndTer |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
||
Карма: 41 Рейтинг сообщения: 0
|
Банальная задержка. |
||
| Вернуться наверх | |||
|
Мурик |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
||
Карма: 1 Рейтинг сообщения: 0
|
В HAL есть функция задержки. Называется HAL_Delay. |
||
| Вернуться наверх | |||
|
AndTer |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
||
Карма: 41 Рейтинг сообщения: 0
|
HAL_Delay Только выдаёт она +/- километр. И ещё в добавок она делает задержку в миллисекундах. В Keil можно написать так: Код: void MT_Delay(uint32_t us) i = (SystemCoreClock/10000000)*us; for (; i != 0; i—); Или так красивее и меньше переменных: Код: void MT_Delay(uint32_t us) Но задержка будет неверная. Нельзя от неё ждать микросекунд. Процентов на 10-20 соврёт. Можно скорректировать путём измерения частоты на ножке МК. Делить не на 10000000, а например на 9000000. Делать стоит всё же на таймере. |
||
| Вернуться наверх | |||
|
sawa330 |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
||
Карма: 1 Рейтинг сообщения: 0
|
Спасибо! Будем пробовать….. |
||
| Вернуться наверх | |||
|
pokk |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
|
Зарегистрирован: Вт ноя 02, 2010 17:46:37 Рейтинг сообщения: 0
|
Как сделать грамотно ассемблерную вставку ? Код: uint8_t __CLZ_MY(uint32_t __count) После того как сделал компилятор начал ругаться что она уже есть Код: /* Architecture v5T, CLZ is also available in Thumb mode for Thumb2 cores */ В общем как правильно вернуть параметр? |
| Вернуться наверх | |
|
Reflector |
Заголовок сообщения: Re: STM32 новичку в ARM что к чему
|
|
Поставщик валерьянки для Кота
Карма: 20 Рейтинг сообщения: 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
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; } }
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
I’m sorry,My label is not very accurate, thank you.
Labels
compatibility
Some compilers/environments do not give the expected result
2 participants
Автор
Лом_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…



[url=http://radikal.ru]
[/url
в intrinsics.h
