FreeRTOS auf uC KL25Z mittels KDS Implementieren

OP #4667146
Guten Tag,

ich habe ein Projekt wo letztenlich FreeRTOS auf einem FRDM-KL25Z Board 
implementiert werden soll. Dazu hätte ich einige Fragen.

1. Ich würde gerne mittels zweier Threads die LED auf dem Board 
ansprechen wollen. Mache ich es ohne Threads Funktioniert mein Code. Mit 
Threads jedoch nicht. könnt Ihr mir sagen was ich ggf. falsch gemacht 
habe?

1
#include <string.h>
2

3
#include "board.h"
4
#include "pin_mux.h"
5
#include "clock_config.h"
6
/*#include "fsl_debug_console.h"*/
7

8
#include "fsl_gpio.h"
9
#include "fsl_device_registers.h"
10
#include "fsl_port.h"
11

12
/* FreeRTOS kernel includes. */
13
#include "FreeRTOS.h"
14
#include "task.h"
15
#include "queue.h"
16
#include "timers.h"
17

18
//#define task_1 (tskIDLE_PRIORITY + 1)
19
static void task_1(void *pvParameters);
20
static void task_2(void *pvParameters);
21
//#define task_2 (configMAX_PRIORITIES - 1)
22

23
/*static void delay(volatile uint32_t nof) {
24
  while(nof!=0) {
25
    __asm("NOP");
26
    nof--;
27
  }
28
}
29
*/
30
/* Task priorities. */
31
//#define hello_task_PRIORITY (configMAX_PRIORITIES - 1)
32

33
/*!
34
 * @brief Application entry point.
35
 */
36
int main(void) {
37
  /* Init board hardware. */
38
  BOARD_InitPins();
39
  BOARD_BootClockRUN();
40
  BOARD_InitDebugConsole();
41

42
  xTaskCreate(task_1, "task_1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);
43
  xTaskCreate(task_2, "task_2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);
44
  vTaskStartScheduler();
45

46
  /* Add your code here */
47

48
  /* Create RTOS task */
49
 // xTaskCreate(hello_task, "Hello_task", configMINIMAL_STACK_SIZE, NULL, hello_task_PRIORITY, NULL);
50
 // vTaskStartScheduler();
51

52
  for(;;) { /* Infinite loop to avoid leaving the main function */
53
    __asm("NOP"); /* something to use as a breakpoint stop while looping */
54
  }
55
}
56

57
static void task_1(void *pvParameters)
58
{
59
  const TickType_t xDelay = 1000 / portTICK_PERIOD_MS;
60
    while (1)
61
    {
62
      GPIO_ClearPinsOutput(GPIOB, 1<<18u); /* red led on */
63
      vTaskDelay( xDelay);
64
      //delay(800000; //taskYIELD();
65
      GPIO_SetPinsOutput(GPIOB, 1<<18u); /* red led off */
66
      vTaskDelay( xDelay);
67
      //delay(800000); //taskYIELD();
68
    }
69
}
70

71
static void task_2(void *pvParameters)
72
{
73
  const TickType_t xDelay = 800 / portTICK_PERIOD_MS;
74
    while (1)
75
    {
76
      GPIO_ClearPinsOutput(GPIOB, 1<<19u); /* green led on */
77
      vTaskDelay( xDelay);//delay(1000000);//taskYIELD();
78
      GPIO_SetPinsOutput(GPIOB, 1<<19u); /* green led off */
79
      vTaskDelay( xDelay);//taskYIELD();//delay(1000000);
80
    }
81
}

2. Es gibt bestehende Codewarrior Projekte, welche zu Kinetis Design 
Studio convertiert werden sollen. Obwohl ich nach dieser 
Anleitung(http://www.nxp.com/files/microcontrollers/doc/user_guide/KDSPUG.pdf?fasp=1&WT_TYPE=Users%20Guides&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=pdf&WT_ASSET=Documentation&fileExt=.pdf) 
vorgehe, bekomme ich immer noch eine Fehlermeldung. Hat jemand 
erfolgreich CW-Projekte in KDS Convertiert? Wenn ja würde ich meine 
Fehlermeldung im nachhinein erläutern.

3. In dem SDK sind Beispielprojekte hinterlegt, mit unteranderem ein 
Eventbeispiel. Meines wissens gibt es ja Event gesteuerte Tasks sowie 
periodisch gesteuerte Tasks. In diesem Beispiel werden offensichtlich 
Event gesteuerte Tasks verwendet. Nur stellt sich mir die Frage, wer 
festlegt in welchen Abständen diese aufgerufen werden. Ich habe über 
einen SystickTimer gelesen, welche ein PreloadRegister besitzt.Je nach 
Einstellung von diesem Wert läuft der Timer früher oder später ab. 
Daraus wird der Grundtackt des Betriebssystems bestimmt. Alle weiteren 
Timer sind SW-Timer die mit diesem Wert arbeiten. Somit kann man die 
Periode von Interrupts festlegen, die von diesem Timer erzeugt werden. 
So viel zur Theorie ob das Praktisch so Funktioniert kann ich noch nicht 
bestätigen. Sollte man den Systicktimer ändern, welche Auswirkungen hat 
dies auf das restliche System? Wie werden periodische Tasks aufgerufen? 
Über den SystickTimer? Kann man dabei Beispielsweise den Timer auf 1ms 
Einstellen, was dann bedeuten würde das die Tasks jede ms aufgerufen 
werden?

4. Beim Anlegen von einem neuen Projekt, wird eine system_MKL25Z4.h 
Datei angelegt. In dieser wird mit rund 21MHz gearbeitet. Ist es nicht 
vorgesehen oder möglich das man mit dem maximalen Takt arbeitet?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.