Przeszukaj forum
Pokazywanie wyników dla tagów 'lib'.
Znaleziono 2 wyniki
-
Cześć piszę własną bibliotekę, trochę na bazie HAL ale uproszczoną i zoptymalizowaną, język: C++. W pliku serial.cpp zdefiniowałem klasę SerialInterface z podstawową obsługą portu, to jest OK - ślady kodu są widoczne w wynikowym kodzie (plik .list) /* USER CODE BEGIN WHILE */ SerialInterface tty0(USART2, 9600); 800022a: 463b mov r3, r7 800022c: f44f 5216 mov.w r2, #9600 ; 0x2580 8000230: 4904 ldr r1, [pc, #16] ; (8000244 <main+0x2c>) 8000232: 4618 mov r0, r3 8000234: f001 fa06 bl 8001644 <_ZN15SerialInterfaceC1EP13USART_TypeDefm> while (1){ // if (tty0.getReceived()>5) // tty0.sendByte('X'); // else if (tty0.getReceived()>0) // tty0.sendByte('L'); tty0.sendByte('-'); 8000238: 463b mov r3, r7 800023a: 212d movs r1, #45 ; 0x2d 800023c: 4618 mov r0, r3 800023e: f001 fa3f bl 80016c0 <_ZN15SerialInterface8sendByteEh> 8000242: e7f9 b.n 8000238 <main+0x20> Oprócz klasy, w pliku serial.cpp zdefiniowałem obsługę przerwania, funkcję USART2_IRQHandler jako: void USART2_IRQHandler(void){....} no i ta funkcja nie pojawia się już w listingu nie pojawia. Program testowy w pętli wysyła znaki, zgodnie z oczekiwaniem: (...) SerialInterface tty0(USART2, 9600); while (1){ tty0.sendByte('-'); } /* USER CODE END 3 */ } (...) jednak po odebraniu znaku "z zewnątrz" wysypuje się -> na debuggerze widzę, że następuje skok do obsługi nieznanego przerwania (👉Default_Handler), czyli faktycznie jakby linker połączył tylko część mojej biblioteki?? (plik startup_stm32g431kbtx.s w którym "ląduje" procesor, zawartość jest defaultowa, nie grzebane) : /** * @brief This is the code that gets called when the processor receives an * unexpected interrupt. This simply enters an infinite loop, preserving * the system state for examination by a debugger. * * @param None * @retval : None */ .section .text.Default_Handler,"ax",%progbits Default_Handler: Infinite_Loop: b Infinite_Loop <--- SKOK TUTAJ .size Default_Handler, .-Default_Handler Jak spowodować, aby linker dołączył moją obsługę IRQ? W CubeMX nie wyklikałem konfiguracji, żeby nie tworzył mi swoich "śmieci" z HAL, które są dalekie od optymalnych. Obsługa przerwania w oryginalnym HAL trwa wieki, a piszę aplikację wymagającą bardzo krótkich i sprawnych przerwań. Ktoś poradzi?
-
Cześć, mam pytanie o regulator PID z biblioteki dla procesorów ARM: arm_math.h. W bibliotece tej są 3 funkcje do obsługi regulatora: - arm_pid_f32(), - arm_pid_q31(), - arm_pid_q15(). 1. W jakich przypadkach powinno się używać której wersji? 2. Której wersji najlepiej użyć w przypadku potrzeby regulacji prądu generowanego przez PWM? Prąd jest regulowany poprzez ustawianie odpowiedniego wypełnienia sygnału PWM.