Work queues: Move to POSIX semaphore abstraction

This commit is contained in:
Lorenz Meier
2015-09-20 00:27:28 +02:00
parent 604644d823
commit d73deabf5c
4 changed files with 14 additions and 17 deletions
+4 -5
View File
@@ -32,6 +32,7 @@
****************************************************************************/ ****************************************************************************/
#include <px4_log.h> #include <px4_log.h>
#include <px4_posix.h>
#include <semaphore.h> #include <semaphore.h>
#include <px4_workqueue.h> #include <px4_workqueue.h>
@@ -39,7 +40,7 @@
__BEGIN_DECLS __BEGIN_DECLS
extern sem_t _hrt_work_lock; extern px4_sem_t _hrt_work_lock;
extern struct wqueue_s g_hrt_work; extern struct wqueue_s g_hrt_work;
void hrt_work_queue_init(void); void hrt_work_queue_init(void);
@@ -49,15 +50,13 @@ void hrt_work_cancel(struct work_s *work);
static inline void hrt_work_lock(void); static inline void hrt_work_lock(void);
static inline void hrt_work_lock() static inline void hrt_work_lock()
{ {
//PX4_INFO("hrt_work_lock"); px4_sem_wait(&_hrt_work_lock);
sem_wait(&_hrt_work_lock);
} }
static inline void hrt_work_unlock(void); static inline void hrt_work_unlock(void);
static inline void hrt_work_unlock() static inline void hrt_work_unlock()
{ {
//PX4_INFO("hrt_work_unlock"); px4_sem_post(&_hrt_work_lock);
sem_post(&_hrt_work_lock);
} }
__END_DECLS __END_DECLS
+2 -2
View File
@@ -66,7 +66,7 @@ struct wqueue_s g_hrt_work;
/**************************************************************************** /****************************************************************************
* Private Variables * Private Variables
****************************************************************************/ ****************************************************************************/
sem_t _hrt_work_lock; px4_sem_t _hrt_work_lock;
/**************************************************************************** /****************************************************************************
* Private Functions * Private Functions
@@ -241,7 +241,7 @@ static int work_hrtthread(int argc, char *argv[])
void hrt_work_queue_init(void) void hrt_work_queue_init(void)
{ {
sem_init(&_hrt_work_lock, 0, 1); px4_sem_init(&_hrt_work_lock, 0, 1);
// Create high priority worker thread // Create high priority worker thread
g_hrt_work.pid = px4_task_spawn_cmd("wkr_hrt", g_hrt_work.pid = px4_task_spawn_cmd("wkr_hrt",
+4 -6
View File
@@ -31,21 +31,19 @@
* *
****************************************************************************/ ****************************************************************************/
#include <px4_log.h> #include <px4_log.h>
#include <semaphore.h> #include <px4_posix.h>
#include <stdio.h> #include <stdio.h>
#include "work_lock.h" #include "work_lock.h"
extern sem_t _work_lock[]; extern px4_sem_t _work_lock[];
void work_lock(int id) void work_lock(int id)
{ {
//PX4_INFO("work_lock %d", id); px4_sem_wait(&_work_lock[id]);
sem_wait(&_work_lock[id]);
} }
void work_unlock(int id) void work_unlock(int id)
{ {
//PX4_INFO("work_unlock %d", id); px4_sem_post(&_work_lock[id]);
sem_post(&_work_lock[id]);
} }
+4 -4
View File
@@ -68,7 +68,7 @@ struct wqueue_s g_work[NWORKERS];
/**************************************************************************** /****************************************************************************
* Private Variables * Private Variables
****************************************************************************/ ****************************************************************************/
sem_t _work_lock[NWORKERS]; px4_sem_t _work_lock[NWORKERS];
/**************************************************************************** /****************************************************************************
* Private Functions * Private Functions
@@ -187,10 +187,10 @@ static void work_process(struct wqueue_s *wqueue, int lock_id)
****************************************************************************/ ****************************************************************************/
void work_queues_init(void) void work_queues_init(void)
{ {
sem_init(&_work_lock[HPWORK], 0, 1); px4_sem_init(&_work_lock[HPWORK], 0, 1);
sem_init(&_work_lock[LPWORK], 0, 1); px4_sem_init(&_work_lock[LPWORK], 0, 1);
#ifdef CONFIG_SCHED_USRWORK #ifdef CONFIG_SCHED_USRWORK
sem_init(&_work_lock[USRWORK], 0, 1); px4_sem_init(&_work_lock[USRWORK], 0, 1);
#endif #endif
// Create high priority worker thread // Create high priority worker thread