标题: 有没有熟悉RTX51TINY的老哥进来看看 [打印本页]

作者: PDDDF    时间: 2020-2-24 10:02
标题: 有没有熟悉RTX51TINY的老哥进来看看
一开始在task0的时候创建task1/2/3/4,task0运行完后自毁,任务一为常态任务,任务2、3、4需按键进入与退出,用什么方法控制任务2/3/4的开/关(运行/停止)比较好,RTX51TINY的任务一旦创建后就独立运行,但能否让某个任务在触发条件1下运行,在触发条件2下停止

以上,求解

作者: angmall    时间: 2020-2-24 19:48
使用 RTX51 的信号
你可以使用 os_wait功能暂停一个任务并等待从另一个任务发出的信号或旗标这可以用于
协调两个或更多的任务
等待一个信号会如下面所诉工作 如果一任务在等待一个信号并且信号标志是 0 在这个信号
被发送之前这个任务将一直处于挂起状态如果信号标志已经是 1 当任务查询信号时信号
标志会被清除并且继续执行任务。
以下例子说明了这种应用
#include <rtx51tny.h>
int counter0;
int counter1;
void job0 (void) _task_ 0 {
        os_create (1); /* mark task 1 as ready */
        while (1) { /* loop forever */
                if (++counter0 == 0) /* update the counter */
                os_send_signal (1); /* signal task 1 */
        }
}
void job1 (void) _task_ 1 {
        while (1) { /* loop forever */
                os_wait (K_SIG, 0, 0); /* wait for a signal */
                counter1++; /* update the counter */
        }
}
在上述例子中 job1一直处于等待状态直到它接收到从任何其他任务发出的信号当它接收到
一个信号时它将使 counter1加 1然后继续等待另一个信号job0 将连续地增加 counter0 直到
它溢出到 0 当溢出发生时 job0发送一个信号给 job1同时 RTX51标记 job1为执行状态在
R T X 5 1 到达下一个时钟报时周期前j o b 1 不会开始执行。


作者: dengweian    时间: 2020-2-24 20:42
你试试这样,比如,task1:用os_single(1)触发;task1:os_wait1(SIG)运行;用 os_switch_task();切换到另一个任务,也就是当前任务不用运行;变向跳过当前任务;
作者: dengweian    时间: 2020-2-24 20:47
你试试这样,如task1;先用定1个flag;用switch case去调用os_single(1);和os_switch_task切换掉本任伤,用os_wait1(SIG)接收,很easy啊
作者: dengweian    时间: 2020-2-24 20:56
switch(flag) {case 0:os_set_ready(1);break;case 1:os_switch_task();}
作者: PDDDF    时间: 2020-2-25 11:20
angmall 发表于 2020-2-24 19:48
使用 RTX51 的信号
你可以使用 os_wait功能暂停一个任务并等待从另一个任务发出的信号或旗标这可以用于
...

意思是指os_wait(K_SIG);在接收到来自其他任务的信号后响应一次后又自动变回等待信号的状态》
作者: angmall    时间: 2020-2-25 13:32
PDDDF 发表于 2020-2-25 11:20
意思是指os_wait(K_SIG);在接收到来自其他任务的信号后响应一次后又自动变回等待信号的状态》

是的,你可以自己写个看看
作者: PDDDF    时间: 2020-2-25 14:25
angmall 发表于 2020-2-25 13:32
是的,你可以自己写个看看

谢谢,现在又有个新问题,不知道是我的keil4的版本不对还是咋的,编译不了RTX51TINY


BL51 BANKED LINKER/LOCATER V6.22.2.0 - SN: T1DZC-K24A8C
COPYRIGHT ARM Germany GmbH 1987 - 2017
".\Objects\STARTUP.obj",
".\Objects\ABC.obj"
TO ".\Objects\ABC" Rtx51Tiny
PRINT(".\Listings\ABC.m51") RAMSIZE(256)
*** FATAL ERROR L257: RTX51-TINY REQUIRES UPGRADE TO PK51
Target not created.
Build Time Elapsed:  00:00:00
作者: angmall    时间: 2020-2-25 18:27
你没有用 Conf_tny.A51

看一下一个本坛链接,介绍得详细
http://www.51hei.com/bbs/dpj-56984-1.html
作者: dengweian    时间: 2020-2-26 17:58
REQUIRES UPGRADE TO PK51 意思是说让你和谐的时候要选PK51(第三个) 不是PRO(第一个),我都不好意思说了,唉




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1