16 Nisan 2026 Perşembe

STM32 FREERTOS-2



CubeMX tarafından oluşturulan CMSIS RTOS API kod:

main.c

/* Definitions for defaultTask */
osThreadId_t defaultTaskHandle;
const osThreadAttr_t defaultTask_attributes = {
.name = "defaultTask",
.stack_size = 128 * 4,
.priority = (osPriority_t) osPriorityLow,
};

/* Create the thread(s) */
/* creation of defaultTask */
defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes);

void StartDefaultTask(void *argument)
{
/* USER CODE BEGIN 5 */

/* Infinite loop */

for(;;)
{

osDelay(1);

}

/* USER CODE END 5 */

}

Aşağıdaki osThreadNew() fonksiyonu içerisinde FreeRTOS Native API fonksiyonu olan xTaskCreate() fonksiyonu çağrılıyor:

cmsis_os2.c

if (xTaskCreate ((TaskFunction_t)func, name, (uint16_t)stack, argument, prio, &hTask) != pdPASS) {
          hTask = NULL;

Doğrudan FreeRTOS API ile bu task oluşturulsaydı şöyle olacaktı:

xTaskCreate(

StartDefaultTask, // task fonksiyonu

"defaultTask", // isim

128, // stack size (word)

NULL, // argument

priority_map, // priority dönüşümü

&taskHandle // handle

);







STM32 FREERTOS-1

 


  • STM32 ile FreeRTOS'u beraber kullanacağın zaman uygulama katmanı olarak "FreeRTOS Native API" yerine CMSIS RTOS API kullanırsan, STM32 haricindeki ARM Cortex-M çekirdeğe sahip başka mikrodenetleyici ailelerine kod taşıma işi daha kolay olur.
  • Her "task" için farklı öncelik ata. 
  • osDelay() fonksiyonu, HAL_Delay() gibi işlemciyi aynı satıra kilitlemez. Ben her bir task içinde farklı asal sayı içeren osDelay() kullanmaya çalışıyorum. Aynı önceliğe sahip "task"ların çakışmasını bu şekilde önlemek istedim. osDelay(2), osDelay(3), osDelay(5) vb. 
  • Task'lar içine yazacağın kodu, sonsuz döngü içinde yaz. "Return" komutuna ulaşan "task" silinir.

13 Haziran 2025 Cuma

Commit --amend

 

Son "commit"teki hatayı düzeltmek için, işlem yapmak için, "commit --amend" kullanılır.






Yukarıdaki log'a göre son commit'te ".gitignore" eklenmiş. Bunu kaldırıp yerine başka bir commit ekleyeceğiz. Örneğin "Main.c" de bir değişiklik yapıp, yukarıdaki gibi "commit --amend" komutunu çağırdığımızda, kod yazdığımız konsol kapanır. Aşağıdaki konsol açılır. Eğer default olarak başka bir editör tanımladıysanız, konsol kapanmadan, tanımladığınız editörde değişiklikleri gerçekleştirebilirsiniz. 





"git commit --amend" komutundan sonra yukarıdaki konsol çıktı. En son commit'lediğimiz dosya artık Main.c oldu. Eski son commit .gitignore dosyası da "artık son commit" olmadığı için o da değişiklikler listesinde görülüyor. Bunun bir önemi yok. Çünkü "#" ile başlayan satırlar yorum satırı. Bu ekranda commit mesajımızı değiştireceğiz.


İlk satırdaki mesajı değiştirdikten sonra "ESC" tuşuna bastığımızda kursör en aşağı satıra inip komut bekler. Değişiklikleri kaydedip çıkmak için ":wp" yazmamız gerekir.




"git log" komutunu çalıştırdığımızda son commitin ve mesajının değiştiğini görürüz.

Eğer editör ile uğraşmadan yazmank istiyorsak: