我正在使用 microC 对 pic16f877a 进行编程以操作电机和螺线管。 我有一些功能可以让电机在不同的时空移动,例如电机 1 移动 100 毫秒,停止,再次移动 100 毫秒等,循环 4 次,电机 2 移动 200 毫秒,依此类推。我希望这些功能同时启动。
想想一个机器人,当你想要每 200 毫秒上下移动它的右手总共 2 分钟,而它的左手每 400 毫秒上下移动一次总共 2 分钟。这个过程应该同时开始。
所以基本上我想开始这样的事情:
start:
solenoid1 runs functionQuarter(moves up-down every x time) total like 2 mins
solenoid2 runs functionHalf(moves up-down every 2x time) total like 2 mins
stop
是否可以使用 micro c 为这张照片执行此操作,我如何调用 2 个或更多函数同时启动?
最佳答案
为什么你认为你需要线程?你确切地知道什么时候应该发生一个操作,所以在那个时候执行那个操作。您所需要的只是一个合适的调度系统,可以帮助您跟踪操作。与线程相比,你没有意外调度的问题,可能延迟更低,不需要线程间同步。
考虑这个草图:
// this task structure says at what time to set
// an output to a certain value
struct task {
time_type when;
output_type output;
value_type value;
};
struct task_queue {
struct task** tasks;
size_t count;
};
void task_queue_push(struct task_queue* q, struct task* t);
struct task* task_queue_front(struct task_queue* q);
struct task* task_queue_pop(struct task_queue* q);
现在,在一个循环中,您会一直查看队列中的第一个元素,然后一直查看 sleep()
直到下一个任务开始。当然,这意味着您需要按开始时间对这些任务进行排序!如果多个任务同时启动,则需要同时运行它们,唯一的限制是“同时”执行每个任务的时间。如有必要,作为处理一项任务的一部分,您可以创建一项或多项其他任务。作为一种变体,您还可以使用回调,而不只是假设您只想设置一些数字输出的 output
和 value
信息。
关于c - 使用 C 使用 pic16f877a 同时运行多个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31501327/