mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-06-30 02:40:35 +08:00
3a47434749
Workaround required Eigen downgrade to 3.2. Hexagon toolchain does
not support C++11 features of newest version of Eigen.
Running make qurt_fixup will downgrade and patch Eigen for qurt.
Running make restore will revert the patch and do a git submodule update
to restore the expected Eigen version.
Added a "restore" target to undo qurt_fixup
Before doing a qurt build run:
make qurt_fixup
That will downgrade Eigen to 3.2 and apply the require patch.
To build another target after downgrading:
make restore
Them make the desired target (other than qurt).
Fixed type used in orb_priority to be consistent with the code
(int* was used in declaration but int32_t* used in code)
Removed unused class member variable in sensors.cpp
Added cmake fix for unit tests. The location of px4_log.c changed.
Fixed the qurt drv_hrt.c implementation to use us instead of ms for time resolution
Added px4_led.c to nuttx platform layer
Use the posix version of px4_led.c for nuttx so we don't end up with
duplicate files. It was moved out of common because it is not used by qurt.
Changed PX4_DEBUG to PX4_WARN when checking for the error condition for store_poll_waiter in vdev.cpp
Updated the px4_log.h file to make calls to the qurt_log functions.
The qurt_log function is defined in the platforms/qurt layer.
Added an option to control starting the commander module in HIL mode.
Moved the flight specific drivers to the configuration file instead of adding them
to the common tool chain file because HIL mode does not need them.
Added the uorb Subscriber and Publisher classes
Call PX4_ISFINITE macro instead of isfinite().
Added px4_led.c to nuttx platform layer
Use the posix version of px4_led.c for nuttx so we don't end up with duplicate files.
It was moved out of common because it is not used by qurt.
Signed-off-by: Mark Charlebois <charlebm@gmail.com>
150 lines
5.1 KiB
C
150 lines
5.1 KiB
C
/****************************************************************************
|
|
* include/nuttx/wqueue.h
|
|
*
|
|
* Copyright (C) 2009, 2011-2013 Gregory Nutt. All rights reserved.
|
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in
|
|
* the documentation and/or other materials provided with the
|
|
* distribution.
|
|
* 3. Neither the name NuttX nor the names of its contributors may be
|
|
* used to endorse or promote products derived from this software
|
|
* without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#pragma once
|
|
|
|
#if defined(__PX4_ROS)
|
|
#error "Work queue not supported on ROS"
|
|
#elif defined(__PX4_NUTTX)
|
|
#include <nuttx/arch.h>
|
|
#include <nuttx/wqueue.h>
|
|
#include <nuttx/clock.h>
|
|
#elif defined(__PX4_POSIX)
|
|
|
|
#include <stdint.h>
|
|
#include <queue.h>
|
|
#include <px4_platform_types.h>
|
|
|
|
#ifdef __PX4_QURT
|
|
#include <dspal_types.h>
|
|
#endif
|
|
|
|
__BEGIN_DECLS
|
|
|
|
#define HPWORK 0
|
|
#define LPWORK 1
|
|
#define NWORKERS 2
|
|
|
|
struct wqueue_s
|
|
{
|
|
pid_t pid; /* The task ID of the worker thread */
|
|
struct dq_queue_s q; /* The queue of pending work */
|
|
};
|
|
|
|
extern struct wqueue_s g_work[NWORKERS];
|
|
|
|
/* Defines the work callback */
|
|
|
|
typedef void (*worker_t)(void *arg);
|
|
|
|
struct work_s
|
|
{
|
|
struct dq_entry_s dq; /* Implements a doubly linked list */
|
|
worker_t worker; /* Work callback */
|
|
void *arg; /* Callback argument */
|
|
uint64_t qtime; /* Time work queued */
|
|
uint32_t delay; /* Delay until work performed */
|
|
};
|
|
|
|
/****************************************************************************
|
|
* Name: work_queues_init()
|
|
*
|
|
* Description:
|
|
* Initialize the work queues.
|
|
*
|
|
****************************************************************************/
|
|
void work_queues_init(void);
|
|
|
|
/****************************************************************************
|
|
* Name: work_queue
|
|
*
|
|
* Description:
|
|
* Queue work to be performed at a later time. All queued work will be
|
|
* performed on the worker thread of of execution (not the caller's).
|
|
*
|
|
* The work structure is allocated by caller, but completely managed by
|
|
* the work queue logic. The caller should never modify the contents of
|
|
* the work queue structure; the caller should not call work_queue()
|
|
* again until either (1) the previous work has been performed and removed
|
|
* from the queue, or (2) work_cancel() has been called to cancel the work
|
|
* and remove it from the work queue.
|
|
*
|
|
* Input parameters:
|
|
* qid - The work queue ID
|
|
* work - The work structure to queue
|
|
* worker - The worker callback to be invoked. The callback will invoked
|
|
* on the worker thread of execution.
|
|
* arg - The argument that will be passed to the workder callback when
|
|
* int is invoked.
|
|
* delay - Delay (in clock ticks) from the time queue until the worker
|
|
* is invoked. Zero means to perform the work immediately.
|
|
*
|
|
* Returned Value:
|
|
* Zero on success, a negated errno on failure
|
|
*
|
|
****************************************************************************/
|
|
|
|
int work_queue(int qid, struct work_s *work, worker_t worker, void *arg, uint32_t delay);
|
|
|
|
/****************************************************************************
|
|
* Name: work_cancel
|
|
*
|
|
* Description:
|
|
* Cancel previously queued work. This removes work from the work queue.
|
|
* After work has been canceled, it may be re-queue by calling work_queue()
|
|
* again.
|
|
*
|
|
* Input parameters:
|
|
* qid - The work queue ID
|
|
* work - The previously queue work structure to cancel
|
|
*
|
|
* Returned Value:
|
|
* Zero on success, a negated errno on failure
|
|
*
|
|
****************************************************************************/
|
|
|
|
int work_cancel(int qid, struct work_s *work);
|
|
|
|
uint32_t clock_systimer(void);
|
|
|
|
int work_hpthread(int argc, char *argv[]);
|
|
int work_lpthread(int argc, char *argv[]);
|
|
|
|
__END_DECLS
|
|
|
|
#else
|
|
#error "Unknown target OS"
|
|
#endif
|