**CLUB İçerisinde Paylaşım Yaparken Dikkat Edilmesi Gereken Önemli Hususlar.** - Paylaşım yaparken Türkçe kurallarına olabildiğince uyulması, sorunuzun rahat anlaşılması ve en hızlı cevabı almanız adına, dikkat edilmesi gereken en önemli husustur. - Paylaşımlarınız da kibar ve yalın bir dil kullanmanız ve gerekirse resim ile eklenti yapmanız, doğru ve hızlı cevap almak adına önemli hususlardır. - Paylaşımları olabildiğince uygun bölümlere açarak, konu ile ilgili kişilerin daha hızlı görmesini sağlamak adına çok önemlidir. - Paylaşımlarda etiket kullanmak o sorunun daha sonra tekrar aranması adına çok önemlidir.
0 beğenilme 0 beğenilmeme
484 kez görüntülendi
STMicroelectronics kategorisinde (4,270 puan) tarafından

Stm32f051 Discovery ile bir çalışmada,
DEBUG anında girmediği HARD_FAULT a neden çalışma anında girer ? Zamanlamalarla oynadım ama olmadı, böyle bir hatayı nasıl handle edersiniz ?

1 cevap

1 beğenilme 0 beğenilmeme
(3,790 puan) tarafından

Kod uzun degilse bakabilir miyiz ? Cok sebebi olabilir ama interruptli bir calisma ise yaris durumuna giriyor olabilir.
Asagida bulunan kod exception i handle etmektedir ve gcc ile yazilmistir. HardFault sizin hata interruptiniz olmalidir.
pc -> sizin hata aldiginiz programin adresini
lr -> sizin hata aldiginiz parcayi cagiran yerin adresini gostermektedir

Bu degerleri disari atabilirseniz. Nerede hata aldiginizi bulabilirsiniz.

struct cm0_frame_s
{
	unsigned long int cf_r0,
				cf_r1,
				cf_r2,
				cf_r3,
				cf_r12,
				cf_lr,
				cf_pc;
};

void exception_handler(struct cm0_frame_s *fr_ptr)
{
	volatile uint32_t lr __attribute__((unused)), pc __attribute__((unused));

	lr = fr_ptr -> cf_lr;
	pc = fr_ptr -> cf_pc;
}

void HardFault_Handler(void)
{
	asm("MOVS R0, #4");
	asm("MOVS R1, LR");
	asm("TST    R0,R1");
	asm("BNE Use_PSP");
	asm("Use_MSP:MRS R0, MSP");
	asm("Use_PSP:MRS R0, PSP");
	asm("B exception_handler");
}
(4,270 puan) tarafından

Kodlar Uzun Hocam. Bir ara programCounter degerini almayı planladım. Ama sanırım USART1 REC interrupt ı kullanıyorum, oradan olma ihtimalinin üzerinde duruyorum. Malum olduğu üzere HAL kullanıyorum. @Baran Ekrem :)

    void HardFault_Handler(void)
{
  /* USER CODE BEGIN HardFault_IRQn 0 */

  /* USER CODE END HardFault_IRQn 0 */
  while (1)
  {
    /* USER CODE BEGIN W1_HardFault_IRQn 0 */
    HAL_GPIO_TogglePin(LD4_GPIO_Port,LD4_Pin);
    HAL_Delay(100);
	  /* USER CODE END W1_HardFault_IRQn 0 */
  }
}
(3,790 puan) tarafından

Yukarida attigim kodu kopyalayin degerleri alabilirsiniz.

...