Witam
Próbuje wykonać wstawkę asemblerową dla pętli opóźniającej.
Program podstawowy, czyli zapalanie diod, niestety kompilator (środowisko Keil uVision5), zgłasza dwa błędy.
#include "stm32f10x.h"
void delay_us_ASM(uint32_t us);
int main(void){
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
GPIOA->CRL |= GPIO_CRL_MODE7;
GPIOA->CRL &= ~GPIO_CRL_CNF7;
GPIOA->CRL |= GPIO_CRL_MODE7;
GPIOA->CRL &= ~GPIO_CRL_CNF7;
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
GPIOB->CRL |= GPIO_CRH_MODE9;
GPIOB->CRL &= ~GPIO_CRH_CNF9;
while(1){
GPIOA->ODR |= GPIO_ODR_ODR7;
GPIOB->ODR |= GPIO_ODR_ODR9;
delay_us_ASM (100000);
GPIOA->ODR &= ~GPIO_ODR_ODR7;
GPIOB->ODR &= ~GPIO_ODR_ODR9;
}
}
void delay_us_ASM(uint32_t us)
{
asm volatile (
"MOV R0,%[loops]\n\t"
"1: \n\t"
"NOP \n\t"
"NOP \n\t"
"SUB R0, #1 \n\t"
"CMP R0, #0 \n\t"
"BNE 1b \n\t" : : [loops] "r" (8*us) : "memory"
);
}
Oraz błędy:
main.c(31): error: #20: identifier "asm" is undefined
main.c(31): error: #65: expected a ";"
W poradnikach, które znalazłem wstawki wyglądają podobnie, widać jest jakiś błąd, którego ja nie widzę. Liczę, że pomożecie mi go znaleźć.