Dispatch tasks among muliple workors

Arduino的多任务管理 今天在一个小东西,需要实现在arduino上两个led灯不同频率闪烁,这就麻烦了,以为arduino同时只能实现一个函数的运行, 一般情况下,处理 Arduino 的多个任务,是把所有任务放在 void loop() 里,然后用 delay() 控制时间。不过,任务一多,这种方法就不太方便了。 这个时候我在网上找到了一篇博客,他利用任务调度器来实现多任务运行。 我贴出代码,大家可以参考一下#i 阅读详情


Sometimes we many have many tasks to be executed by several workors. we wish tasks can be executed by workors in equal division

Basic solution:

1. put all tasks into a PIPO pipeline.

2. Bring up several workors.

3. Each workors do loop to fetch a task from pipeline, until no task in the pipeline, quit workd



#!/bin/ksh

export PIPEFD=9
export PIPEFILE=pipefile
export PIPEEND=TASKEND
export MAXWORKER=3

echo "=== BEGIN ==="

# Define an FIFO pipeline
rm -f $PIPEFILE
mkfifo $PIPEFILE

# Redirect stdin/stdout to pipeline file
eval "exec ${PIPEFD}<>${PIPEFILE}"

# Simulate the task list into pipeline file
echo "aaa bbb ccc ddd eee fff ggg hhh" | tr ' ' '\n' >&${PIPEFD}

# Add task end flag into pipeline file
for WORKOR in {1..$MAXWORKER}; do
  echo "${PIPEEND}" >&${PIPEFD}
done

# Launch workers in parallel
for WORKOR in {1..$MAXWORKER}; do
  while read TASK; do
    [[ "${TASK}" == "${PIPEEND}" ]] && exit 0
    sleep 1
    echo "WORKOR["${WORKOR}"]="${TASK}
    # TODO: execute TASK using WORKOR
  done <&${PIPEFD} &
  PIDS="$PIDS $!"
done

# Wait all workor done
wait $PIDS

# Close FD for pipeline
eval "exec ${PIPEFD}>&-"
eval "exec ${PIPEFD}<&-"

echo "===  END  ==="


Sample execute output:

=== BEGIN ===
WORKOR[3]=ccc
WORKOR[2]=bbb
WORKOR[1]=aaa
WORKOR[3]=ddd
WORKOR[1]=fff
WORKOR[2]=eee
WORKOR[1]=hhh
WORKOR[3]=ggg
===  END  ===

Arduino-Task-Scheduler:使 Arduinos 能够运行多个任务 这是带有 ATmega328p 微控制器的 Arduinos 任务调度程序。 受启发。 注意:该库在 ATmega328p 上使用定时器 1,因此它与使用相同定时器的某些库不兼容。 (例如 、 或针 9 和 10 上的analogWrite() ) 如何使用? 第 1 步。 把Sch.init(); 和Sch.start(); 放入void setup() ,并放入Sch.dispatchTasks(); 进入void loop() ,像这样: void setup () { // Your code... Sch. init (); Sch. start (); } void loop () { Sch. dispatchTasks (); } 第 2 步。 将任务放在代码的末尾,如下所示: void setup () { // Yo 立即下载

相关推荐

量化策略分享之ST股弱转强,回测年化123%

本策略的核心是精选ST股票,国九条过滤,防止直接暴雷退市,只做ST股票的弱转强,弱转强的认定标准是前日涨停但昨日不涨停,昨日收盘价大于前一日最低价,昨日收盘价大于10日线,昨日成交量大于前一日的成交量但小于前一日成交量的10倍,股价大于1;这类股票强势,有资金介入,能获得超额收益。

qq_29301281的博客 1268

任务启动需要经历九九八十一难,没有大师兄带路,咱们依旧可以取得真经

这是一篇介绍PowerJob任务手动启动的流程的文章,里面也有很多java的应用,在实际项目中如何使用java,如果感兴趣,欢迎留言讨论

zcrazy的博客 1423

反激开关电源设计全解析:从CCM/DCM原理到PCB布局实战

开关电源作为现代电子设备的能量转换核心,其核心原理是通过高频开关动作实现高效的电能变换。反激拓扑因其结构简单、成本低廉且易于实现电气隔离,成为小功率离线式电源的主流选择。其技术价值在于通过变压器耦合实现能量存储与传递,解决了安全隔离与多路输出等关键需求,广泛应用于充电器、适配器及家电供电等场景。本文聚焦反激电路,深入剖析其CCM与DCM两种工作模式的原理差异及选型考量,并结合伏秒平衡定律与RCD钳位等热词,详解从变压器计算到MOSFET选型的完整工程设计流程。

weixin_31951365的博客 344

dispatch_async 与 dispatch_get_global_queue

#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) - (void)viewDidLoad {     [super viewDidLoad];     dispatch_async(kBgQueue, ^{         NSData* d

EricSuper的专栏 5万+

lidar点云比赛-Southlidar软件使用入门

lidar点云比赛-Southlidar软件使用入门 广西高校重点实验室培训基地 系统控制与信息处理重点实验室 本篇博客来自河池学院: 智控无人机小组 写作时间:2020.09.29 一、软件资源及安装 1.下载地址: https://pan.baidu.com/s/1jN1pynmAZOqj5mMx774pVg 提取码:gkvv (资源来自南方测绘) 2.安装 进入链接,找到软件文件夹, 内含文件即为安装包 3.下载成功后按提示安装即可 4.安装成功后桌面自动创建一个快捷方式 二、界面布

qq_49621416的博客 4891

UDS诊断服务基础详解之二19服务

本文主要介绍UDS统一诊断服务的19 01服务,包含状态位和故障码的解析以及19 01服务的具体说明

车载网络小D的博客 1万+

[Arduino库]任务调度器,更好地处理多任务

一般情况下,处理 Arduino 的多个任务,是把所有任务放在 void loop() 里,然后用 delay() 控制时间。不过,任务一多,这种方法就不太方便了。 最近刚刚看了一本书:《时间触发嵌入式系统设计模式》,里面介绍的调度器,可以以特定的周期执行特定的任务,值得在 Arduinio 项目中借鉴。我也刚刚把这个调度器移植到 Arduino 中:https://github.com/bla

MRGCODING 1万+

Android车载蓝牙开发全攻略:从基础到高级优化

本文系统介绍了Android车载蓝牙开发的核心技术与实践指南。文章首先阐述了蓝牙在智能汽车中的关键作用,包括免提通话、音频流媒体等应用场景。随后详细解析了蓝牙协议基础,重点介绍了HFP、A2DP等车载常用协议。开发实战部分提供了设备发现、连接、数据传输的完整代码示例,并融入多线程和内存优化技巧。通过真实车载案例,展示了启动时间、流畅度和资源使用的优化策略。最后针对面试需求,提供了专业的技术问答,涵盖蓝牙开发全流程。全文紧密结合Android车载开发职位要求,为开发者提供了一套完整的蓝牙技术解决方案。

郑伟强dev的专栏 119

sed 提取匹配的字符串内容

# STR="MAIL FROM(CCC) TO(DDD)" #echo $STR | sed -n 's/.*FROM(\([^)]\{1,\}\)).*TO(\(.*\))/\1-\2/g'p 提取括号里面的内如 STR="MAIL FROM(ABCD) BODY" echo $STR | sed 's/^.*FROM(\(.*\)).*$/\1/g'      # A

程序员码工的专栏 2万+

反光柱定位算法实战05:Cartographer Landmark融合定位——从原理到实战

本文介绍了CartographerLandmark融合定位方案,该方案将反光柱作为Landmark节点直接融入Cartographer后端优化框架,避免了传统双系统切换导致的位姿跳变问题。文章详细阐述了Landmark的核心原理、数据发布格式(包括ID、坐标、权重等关键字段)以及两种工作模式(建图模式和导航模式)。特别指出组合反光柱作为Landmark可提供方向参考,有效解决镜像歧义问题。该方案通过统一优化框架实现稳定定位,尤其适用于缺乏自然特征的环境,但存在ID匹配不稳定等局限性。整体而言,Cartogr

Studying…… 424

【数字IC验证进阶】正则表达式(Regular Expression)快速入门指南

在芯片开发过程中,正则表达式的使用非常常见。初次上手晦涩难懂,多用几次爱不释手!

悟已往之不谏 知来者之可追 1441

Unix Shell find/xargs

// Solaris 1. find ./ -name "*.jar" -exec jar -tvf {} /; For each file found from find command, it will invoke a new process space to run tar -tvf ....  2. find ./ -name "*.jar" | xa

程序员码工的专栏 1130

ThingsBoard教程(十九):规则节点概览介绍

在ThingsBoard的CE V2.5.6版本中,一共有这几种类型在每一种类都有包含了多个节点,每一种类型的节点都有不同的颜色表示本篇文章做一个简单的概括,后续的文章会详细讲解每一个种类的节点如何使用,每一个节点的使用。一共有10个,使用黄色表示 过滤器节点用于消息过滤和路由。一共有9个,使用绿色 属性节点用于更新传入消息的元数据。一共三个,使用蓝色 转换节点用于更改传入消息字段,如发起者、消息类型、有效负载和元数据。一共21个,使用红色标识 动作节点根据传入的消息执行各种动作。一共9个,使用黄色表示,

知无涯 1万+

ClearCase - How to pass 'alias' to sub-shell after setview command is executed.

1. Put your alias into your ~/.$(SHELL)rc file, for ksh example#~/>:cat .kshrcalias ll=ls -lalias scp=scp -F ~/.ssh/ssh_config#~/>:cat .kshrc For c shell, it should be .cshrcFor bash

程序员码工的专栏 1034

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Unix Shell - If statement

# Notice: this is executed within /bin/ksh #############  format #############if [ $condition ]then    ...elif [ ]    ...else    ...fiif /usr/bin/id | /usr/bin/grep uid=0(

程序员码工的专栏 1009

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Unix Shell - Loop statement

 #!/bin/ksh######### FOR #################for i in HUP INT QUIT TERMdo  echo $idone#cat f.txt#aa ab#ba bb bc##!/bin/kshfor word in `cat f.txt`do    echo $worddo

程序员码工的专栏 889

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Unix Shell - Case statement

 #!/bin/kshX=XYZcase $X inX* | *Z)        # X in pattern or sample    echo "1111111"    ;;X*Z)             # arg in pattern    echo "2222222"    ;;*)                 #default    echo "3333333"   

程序员码工的专栏 842

KSH - String Operaters

#!/bin/kshvar="123451234512345"output=${#var}            # 15output=${var#1*4}      # 51234512345, start must be the first char of that stringoutput=${var##1*4}   # 5, start must be t

程序员码工的专栏 730

ksh trap signal

What's Signal When a signal is received, a script can do one of three actions: Ignore it and do nothing.Catch the signal using trap and take appropriate action.Take the default action. All th

程序员码工的专栏 727

ksh getopts function

This is a sample on how to use getopts to parse command line options. Principle while getopts "ab:c" opt; do case $opt in a ) process option -a ;; b ) process option -b

程序员码工的专栏 726

Unix Shell - Command Line Interface

#!/bin/ksh#  $#: command line parameters number, exclude the command itself#  $0: the command itself#  $1: the first command parameter#  $2: the second command parameter#  $*: all command

程序员码工的专栏 718

Script to merge configuration file

 目地:把一个配置文件里面的配置项拷贝到另一个配置文件中。 前提要求:两个配置文件基本相同, 文件名相同, 主要用在软件升级的情况下, 新版本的配置文件和老版本的配置文件基本相同, 但是可能新增或者删除了部分配置项, 现在需要一个工具把老的配置值拷贝到新的配置文件里面去.  原来的/u/XXX/old/a.conf新的/u/XXX/new/a.conf

程序员码工的专栏 704

KSH print numeric value 0000-9999

Problem Statement: Print numeric value 0000-9999 # use for loop #!/bin/ksh for i in {0..9999} do s=$(printf "%04d" $i) echo "for $s times" done # use while loop #!/bin/ksh

程序员码工的专栏 655

ksh array variable

Define Array Variable set -A COLORS RED BLUE GREEN or COLORS[0]=RED COLORS[1]=BLUE COLORS[2]=GREEN Get Array Size ${#COLORS[@]} Notice: this is the occupi

程序员码工的专栏 653

Build and Install a PERL module

1. Build & Install For example we are going to install Template Perl module under directory ~/tools/perlmodule Download Template-Toolkit-2.24.tar.gzUnzip Template-Toolkit-2.24perl Makefi

程序员码工的专栏 633

Unix Shell - Digital Algorithm

#!/bin/ksh X=10Y=2  Z=`expr $X + $Y`    # orecho $Z(( Z = $X / 4 + 2 ))   # orecho $ZZ=$((X+Y))echo $ZZ=$(awk /^PermSize=/ {print substr($0, 10, 30)} $ODBCINI)echo $ZZ=$(echo 100 | gre

程序员码工的专栏 614
上一篇: variable in while loop between ksh vs. bash
下一篇: DB2 client commond line options
假装80后
博客等级 码龄19年 28粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值