mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-02-11 18:34:19 -04:00
AP_HAL_SITL: Remove timer process suspension interface
This commit is contained in:
parent
a2dfca2fee
commit
0f2482f05b
@ -86,7 +86,7 @@ void HAL_SITL::run(int argc, char * const argv[], Callbacks* callbacks) const
|
|||||||
|
|
||||||
while (!HALSITL::Scheduler::_should_reboot) {
|
while (!HALSITL::Scheduler::_should_reboot) {
|
||||||
callbacks->loop();
|
callbacks->loop();
|
||||||
HALSITL::Scheduler::_run_io_procs(false);
|
HALSITL::Scheduler::_run_io_procs();
|
||||||
}
|
}
|
||||||
execv(argv[0], argv);
|
execv(argv[0], argv);
|
||||||
AP_HAL::panic("PANIC: REBOOT FAILED");
|
AP_HAL::panic("PANIC: REBOOT FAILED");
|
||||||
|
@ -13,8 +13,6 @@ extern const AP_HAL::HAL& hal;
|
|||||||
|
|
||||||
|
|
||||||
AP_HAL::Proc Scheduler::_failsafe = nullptr;
|
AP_HAL::Proc Scheduler::_failsafe = nullptr;
|
||||||
volatile bool Scheduler::_timer_suspended = false;
|
|
||||||
volatile bool Scheduler::_timer_event_missed = false;
|
|
||||||
|
|
||||||
AP_HAL::MemberProc Scheduler::_timer_proc[SITL_SCHEDULER_MAX_TIMER_PROCS] = {nullptr};
|
AP_HAL::MemberProc Scheduler::_timer_proc[SITL_SCHEDULER_MAX_TIMER_PROCS] = {nullptr};
|
||||||
uint8_t Scheduler::_num_timer_procs = 0;
|
uint8_t Scheduler::_num_timer_procs = 0;
|
||||||
@ -91,18 +89,6 @@ void Scheduler::register_timer_failsafe(AP_HAL::Proc failsafe, uint32_t period_u
|
|||||||
_failsafe = failsafe;
|
_failsafe = failsafe;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scheduler::suspend_timer_procs() {
|
|
||||||
_timer_suspended = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Scheduler::resume_timer_procs() {
|
|
||||||
_timer_suspended = false;
|
|
||||||
if (_timer_event_missed) {
|
|
||||||
_timer_event_missed = false;
|
|
||||||
_run_timer_procs(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Scheduler::system_initialized() {
|
void Scheduler::system_initialized() {
|
||||||
if (_initialized) {
|
if (_initialized) {
|
||||||
AP_HAL::panic(
|
AP_HAL::panic(
|
||||||
@ -134,7 +120,7 @@ void Scheduler::reboot(bool hold_in_bootloader)
|
|||||||
_should_reboot = true;
|
_should_reboot = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scheduler::_run_timer_procs(bool called_from_isr)
|
void Scheduler::_run_timer_procs()
|
||||||
{
|
{
|
||||||
if (_in_timer_proc) {
|
if (_in_timer_proc) {
|
||||||
// the timer calls took longer than the period of the
|
// the timer calls took longer than the period of the
|
||||||
@ -154,16 +140,12 @@ void Scheduler::_run_timer_procs(bool called_from_isr)
|
|||||||
}
|
}
|
||||||
_in_timer_proc = true;
|
_in_timer_proc = true;
|
||||||
|
|
||||||
if (!_timer_suspended) {
|
|
||||||
// now call the timer based drivers
|
// now call the timer based drivers
|
||||||
for (int i = 0; i < _num_timer_procs; i++) {
|
for (int i = 0; i < _num_timer_procs; i++) {
|
||||||
if (_timer_proc[i]) {
|
if (_timer_proc[i]) {
|
||||||
_timer_proc[i]();
|
_timer_proc[i]();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (called_from_isr) {
|
|
||||||
_timer_event_missed = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// and the failsafe, if one is setup
|
// and the failsafe, if one is setup
|
||||||
if (_failsafe != nullptr) {
|
if (_failsafe != nullptr) {
|
||||||
@ -173,23 +155,19 @@ void Scheduler::_run_timer_procs(bool called_from_isr)
|
|||||||
_in_timer_proc = false;
|
_in_timer_proc = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scheduler::_run_io_procs(bool called_from_isr)
|
void Scheduler::_run_io_procs()
|
||||||
{
|
{
|
||||||
if (_in_io_proc) {
|
if (_in_io_proc) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_in_io_proc = true;
|
_in_io_proc = true;
|
||||||
|
|
||||||
if (!_timer_suspended) {
|
|
||||||
// now call the IO based drivers
|
// now call the IO based drivers
|
||||||
for (int i = 0; i < _num_io_procs; i++) {
|
for (int i = 0; i < _num_io_procs; i++) {
|
||||||
if (_io_proc[i]) {
|
if (_io_proc[i]) {
|
||||||
_io_proc[i]();
|
_io_proc[i]();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (called_from_isr) {
|
|
||||||
_timer_event_missed = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
_in_io_proc = false;
|
_in_io_proc = false;
|
||||||
|
|
||||||
@ -209,7 +187,7 @@ void Scheduler::stop_clock(uint64_t time_usec)
|
|||||||
_stopped_clock_usec = time_usec;
|
_stopped_clock_usec = time_usec;
|
||||||
if (time_usec - _last_io_run > 10000) {
|
if (time_usec - _last_io_run > 10000) {
|
||||||
_last_io_run = time_usec;
|
_last_io_run = time_usec;
|
||||||
_run_io_procs(false);
|
_run_io_procs();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,8 +23,6 @@ public:
|
|||||||
|
|
||||||
void register_timer_process(AP_HAL::MemberProc);
|
void register_timer_process(AP_HAL::MemberProc);
|
||||||
void register_io_process(AP_HAL::MemberProc);
|
void register_io_process(AP_HAL::MemberProc);
|
||||||
void suspend_timer_procs();
|
|
||||||
void resume_timer_procs();
|
|
||||||
|
|
||||||
void register_timer_failsafe(AP_HAL::Proc, uint32_t period_us);
|
void register_timer_failsafe(AP_HAL::Proc, uint32_t period_us);
|
||||||
|
|
||||||
@ -43,13 +41,13 @@ public:
|
|||||||
void sitl_end_atomic();
|
void sitl_end_atomic();
|
||||||
|
|
||||||
static void timer_event() {
|
static void timer_event() {
|
||||||
_run_timer_procs(true);
|
_run_timer_procs();
|
||||||
_run_io_procs(true);
|
_run_io_procs();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t stopped_clock_usec() const { return _stopped_clock_usec; }
|
uint64_t stopped_clock_usec() const { return _stopped_clock_usec; }
|
||||||
|
|
||||||
static void _run_io_procs(bool called_from_isr);
|
static void _run_io_procs();
|
||||||
static bool _should_reboot;
|
static bool _should_reboot;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -57,9 +55,8 @@ private:
|
|||||||
uint8_t _nested_atomic_ctr;
|
uint8_t _nested_atomic_ctr;
|
||||||
static AP_HAL::Proc _failsafe;
|
static AP_HAL::Proc _failsafe;
|
||||||
|
|
||||||
static void _run_timer_procs(bool called_from_isr);
|
static void _run_timer_procs();
|
||||||
|
|
||||||
static volatile bool _timer_suspended;
|
|
||||||
static volatile bool _timer_event_missed;
|
static volatile bool _timer_event_missed;
|
||||||
static AP_HAL::MemberProc _timer_proc[SITL_SCHEDULER_MAX_TIMER_PROCS];
|
static AP_HAL::MemberProc _timer_proc[SITL_SCHEDULER_MAX_TIMER_PROCS];
|
||||||
static AP_HAL::MemberProc _io_proc[SITL_SCHEDULER_MAX_TIMER_PROCS];
|
static AP_HAL::MemberProc _io_proc[SITL_SCHEDULER_MAX_TIMER_PROCS];
|
||||||
|
Loading…
Reference in New Issue
Block a user