Hi
I am using nRF9160 DK board ,below is my code, I want to create two threads in main() function for LED 1 and LED 2 to turn on led alternatively.
For some reason threads are not creating.Can you help me what wrong I have done in the code which is preventing to create thread.
#include <device.h>
#include <drivers/gpio.h>
#include <generated_dts_board_unfixed.h>
#include <kernel.h>
#include <sys/printk.h>
#include <zephyr.h>
#define LED_PORT DT_ALIAS_LED0_GPIOS_CONTROLLER
#define LED_PIN_1 DT_GPIO_LEDS_LED0_GPIOS_PIN
#define LED_PIN_2 DT_GPIO_LEDS_LED1_GPIOS_PIN
#define STACK_SIZE 1024U
#define PRIORITY 1u
void drive_led1(void *dummy1, void *dummy2, void *dummy3);
void drive_led2(void *dummy1, void *dummy2, void *dummy3);
void driveLed(struct device *devId, uint32_t pinNum);
K_THREAD_STACK_DEFINE(led1_id_stack_area, STACK_SIZE);
K_THREAD_STACK_DEFINE(led2_id_stack_area, STACK_SIZE);
K_SEM_DEFINE(drive_led, 1, 1); //Statically define and intialize a semaphore.
static struct k_thread led1_id;
static struct k_thread led2_id;
void main(void)
{
printk("Hello World!\n");
k_tid_t Led1_tid = k_thread_create(&led1_id,led1_id_stack_area,K_THREAD_STACK_SIZEOF(led1_id_stack_area),
drive_led1,NULL, NULL, NULL,PRIORITY, 0, K_NO_WAIT);
k_thread_name_set(Led1_tid, "thread_led1");
k_tid_t Led2_tid = k_thread_create(&led2_id,led2_id_stack_area,K_THREAD_STACK_SIZEOF(led2_id_stack_area),
drive_led2, NULL, NULL, NULL,PRIORITY, 0, K_NO_WAIT);
k_thread_name_set(Led2_tid, "thread_led2");
while (1)
{
}
}
//K_THREAD_DEFINE(led1_id, STACK_SIZE, drive_led1, NULL, NULL, NULL, 1, 0, K_NO_WAIT);
//K_THREAD_DEFINE(led2_id, STACK_SIZE, drive_led2, NULL, NULL, NULL, 1, 0, K_NO_WAIT);
void drive_led1(void *dummy1, void *dummy2, void *dummy3) {
struct device *dev;
static int semaTaken;
dev = device_get_binding(LED_PORT);
gpio_pin_configure(dev, LED_PIN_1, GPIO_DIR_OUT);
while (1) {
semaTaken = k_sem_take(&drive_led, K_FOREVER);
driveLed(dev, LED_PIN_1);
k_sem_give(&drive_led);
}
}
void drive_led2(void *dummy1, void *dummy2, void *dummy3) {
struct device *dev;
static int semaTaken;
dev = device_get_binding(LED_PORT);
gpio_pin_configure(dev, LED_PIN_2, GPIO_DIR_OUT);
while (1) {
semaTaken = k_sem_take(&drive_led, K_FOREVER);
driveLed(dev, LED_PIN_2);
k_sem_give(&drive_led);
}
}
void driveLed(struct device *devId, uint32_t pinNum) {
gpio_pin_write(devId, pinNum, 1);
k_sleep(1000u);
gpio_pin_write(devId, pinNum, 0);
k_sleep(1000u);
}