在论坛里扒了半天,看了看原来关于RTX51Tiny的帖子,发现达人还是挺多的,我是个新手,刚开始弄,希望得到大家的指点。
是关于我在做试验中遇到一些问题。资料我也是泛泛的看了下,我平时开发都是用C8051f040单片机,好象看到有资料说c8051f040不支持RTX51Tiny操作系统,c8051f020是支持的,不知道是不是因为f040因为有page的设置,所以不支持还是有别的原因。这是开头话,由于不能在通常使用的单片上跑这个对于我来说的新东西。我就拿了一个简单的单片AT89S51来做试验。
我是想在一个单片机上简单的跑一个多任务的程序。
我做了几个试验。
第一个试验是软仿真,我将..\Keil\C51\RtxTiny2\Examples目录下的EX2例程拷出来,将工程中
RTX_EX2.C的文件中稍加修改。程序如下:
#include <rtx51tny.h>
long counter0;
long counter1;
job0 () _task_ 0 {
os_create_task (1);
while (1) {
counter0++;
os_wait (K_TMO, 5, 0);
}
}
job1 () _task_ 1 {
while (1) {
counter1++;
os_wait (K_TMO, 10, 0);
}
}
比较简单吧。包含的文件"Conf_tny.A51"文件中的设置我也没有改动,我在"counter0++"和"counter1++"处设置断点,然后使用RTX-Tiny Tasklist观察窗口观察。开始运行后,程序指针能够进入两个任务中,在RTX-Tiny Tasklist观察窗口也能观察到,两个任务在Running与Waiting之间交替。注意工程中默认使用的器件是Philips的80C32。由于我想在单片机AT89S52中运行,所以,我更换了器件,在device选择中,我选择了Atmel公司的AT89S51,可是当我仅仅更换了器件选择设置
后,我再进行如上的软件仿真操作时,却无法达到task 1任务中的断点。而且在Output Windows的
Command窗口中还有如下出错提示:"*** error 65: access violation at I:0xFF : no 'write' permission",我有些疑惑。仅仅更换了器件选择设置,怎么就会有问题呢?仿真的程序代码内容与硬件没有关系啊??
我又做了第二个试验,
在硬件上跑程序。我采用的是单片机AT89S51,晶振是11.0592Mhz。
我将程序做了一些修改,程序首先是如下,
#include <rtx51tny.h>
#include <reg51.h>
sbit P2_0 = P2^0;
long counter0;
job0 () _task_ 0 {
while (1) {
counter0++;
P2_0 = !P2_0;
os_wait (K_TMO, 5, 0);
}
}
文件"Conf_tny.A51"中的内容我没有做改动,INT_CLOCK值是10000, TIMESHARING值是5.这个程序是一个单任务,程序运行中,每约50ms,P2^0口的电平会做一次翻转。我将该程序编译,并将生成的.hex文件在
线下载到单片机中,断电后重行上电运行,单片机 P2^0口的电平确实是约50毫秒翻转一次,因为晶振使用的是11.0592Mhz,所以将INT_CLOCK值改为9216,则是准准的50ms翻转一次。注意这里我直接在"Conf_tny.A51"文件中修改后,直接编译工程,将生成的.hex文件在线下载到单片机中。波形周期也得到修正。我在看一些论坛中其他的帖子说要运行..\Keil\C51\RTX_TINY文件夹中的GENRTX.BAT生成新
的.lib文件,我不是很明白,我也看了手册,也不是很明白是为什么??希望能够得到大家的指点。
这里继续我的试验。单任务试验完了,试验多任务了,我将我的程序代码再做修改,如下:
#include <rtx51tny.h>
#include <reg51.h>
sbit P2_0 = P2^0;
sbit P2_1 = P2^1;
long counter0;
job0 () _task_ 0 {
os_create_task (1);
while (1) {
counter0++;
P2_0 = !P2_0;
os_wait (K_TMO, 5, 0);
}
}
job1 () _task_ 1 {
while (1) {
P2_1 = !P2_1;
os_wait (K_TMO, 8, 0);
}
}
这里我主要是想看看两个任务之间来回切换,在任务0中,建立(我不是很专业,这里的词可能也不专业)
了任务1,在任务0进入时间等待的过程中,可以执行任务1.这样P2^0,P2^1都可以有波形输出。P2^0的周
期是100ms,而P2^1周期是160ms,但是当我把编译所得到的.hex在线下载到单片机中,P2^0端口输出的波形
是乱的,频率大概是几百Hz,肯定不对,而P2^1干脆是高电平,没有变化。我不知道问题是出在哪儿了。
也没觉得有什么错误。希望大家能帮忙分析分析问题出在哪儿了呢??是哪儿的设置不对??还是在程序的编译下载上出了问题??谢谢!!
也祝大家新年快乐!! |