• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ustawianie flag w przerwaniu timera - dobrze, czy źle

0 głosów
47 wizyt
pytanie zadane 11 października 2018 w Arduino przez Spektral Początkujący (400 p.)

Witam. Moje pytanie tyczy się ogólnie programowania mikrokontrolerów. Oto kod dla STM32:
 

#include <string.h>
#include "stm32f1xx.h"

UART_HandleTypeDef uart;
TIM_HandleTypeDef tim2;
int status = 0;
void send_string(char* s)
{
	HAL_UART_Transmit(&uart, (uint8_t*)s, strlen(s), 1000);
}

void TIM2_IRQHandler(void)
{
  HAL_TIM_IRQHandler(&tim2);
}


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
   status = 1;
}

int main(void)
{
	SystemCoreClock = 8000000;	// taktowanie 8Mhz
	HAL_Init();

	__HAL_RCC_GPIOA_CLK_ENABLE();
	__HAL_RCC_USART2_CLK_ENABLE();
	__HAL_RCC_TIM2_CLK_ENABLE();

	GPIO_InitTypeDef gpio;
	gpio.Mode = GPIO_MODE_AF_PP;
	gpio.Pin = GPIO_PIN_2;
	gpio.Pull = GPIO_NOPULL;
	gpio.Speed = GPIO_SPEED_FREQ_LOW;
	HAL_GPIO_Init(GPIOA, &gpio);

	gpio.Mode = GPIO_MODE_AF_INPUT;
	gpio.Pin = GPIO_PIN_3;
	HAL_GPIO_Init(GPIOA, &gpio);

	uart.Instance = USART2;
	uart.Init.BaudRate = 115200;
	uart.Init.WordLength = UART_WORDLENGTH_8B;
	uart.Init.Parity = UART_PARITY_NONE;
	uart.Init.StopBits = UART_STOPBITS_1;
	uart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
	uart.Init.OverSampling = UART_OVERSAMPLING_16;
	uart.Init.Mode = UART_MODE_TX_RX;
	HAL_UART_Init(&uart);



	tim2.Instance = TIM2;
	tim2.Init.Period = 1000 - 1;
	tim2.Init.Prescaler = 8000 - 1;
	tim2.Init.ClockDivision = 0;
	tim2.Init.CounterMode = TIM_COUNTERMODE_UP;
	tim2.Init.RepetitionCounter = 0;
	tim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
	HAL_TIM_Base_Init(&tim2);

	HAL_NVIC_EnableIRQ(TIM2_IRQn);
	HAL_TIM_Base_Start_IT(&tim2);

	while (1)
	{
		if(status == 1)
		{
			send_string("Hello world!\r\n");
			status = 0;
		}
	}
}

Kod ten drukuję napis co 1s. Ustawiam sobie flagę w przerwaniu i działa wszystko w porządku. 
Jak zrobić tak działający program bez ustawania flag w przerwaniu? Wysyłanie napisu w samym przerwaniu nie jest rozwiązaniem, bo jeżeli co sekundę trzeba na przykład odświeżyć wyświetlacz OLED, to rozwiązanie takie będzie zabronione. 

Dodam, że usłyszałem opinie, że ustawianie flag jest nieeleganckie, wręcz błędne. 

Proszę o jakąś podpowiedź.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 143 wizyt
0 głosów
0 odpowiedzi 39 wizyt
pytanie zadane 14 grudnia 2018 w C i C++ przez Karol Matusiewicz Nowicjusz (200 p.)
0 głosów
1 odpowiedź 216 wizyt
pytanie zadane 2 czerwca 2016 w C i C++ przez Squidy Bywalec (2,310 p.)
Porady nie od parady
Możesz ukryć, zamknąć lub zmodyfikować swoje pytanie, za pomocą przycisków znajdujących się pod nim. Nie krępuj się poprawić pochopnie opublikowanego pytania czy zamknąć go po uzyskaniu satysfakcjonującej odpowiedzi. Umożliwi to zachowanie porządku na forum.Przyciski pytania

62,317 zapytań

108,448 odpowiedzi

226,395 komentarzy

35,105 pasjonatów

Przeglądających: 219
Pasjonatów: 16 Gości: 203

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...