/*Copyright 2020 Benjamin Vedder benjamin@vedder.seThis file is part of the VESC firmware.The VESC firmware is free software: you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.The VESC firmware is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program. If not, see <http://www.gnu.org/licenses/>.*/#include "worker.h"#include "ch.h"#include "hal.h"// Private typestypedef struct {void *arg;void(*func)(void *arg);} worker_arg_t;// Private variablesstatic thread_t *m_tp = 0;static worker_arg_t m_wa;static THD_WORKING_AREA(work_thread_wa, 512);static THD_FUNCTION(work_thread, arg);void worker_execute(void(*func)(void *arg), void *arg) {worker_wait();m_wa.func = func;m_wa.arg = arg;chThdCreateStatic(work_thread_wa, sizeof(work_thread_wa), NORMALPRIO, work_thread, &m_wa);}void worker_wait(void) {if (m_tp) {chThdWait(m_tp);}}static THD_FUNCTION(work_thread, arg) {chRegSetThreadName("Worker");m_tp = chThdGetSelfX();((worker_arg_t*)arg)->func(((worker_arg_t*)arg)->arg);m_tp = 0;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。