⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 faq.txt

📁 就像在嵌入系统中使用C语言替代汇编一样,在嵌入系统中使用RTOS是大势所趋。原因主要是现在在大多数情况下编程效率比执行效率重要(单片机便宜嘛)。但纵观51的RTOS
💻 TXT
📖 第 1 页 / 共 2 页
字号:
问:
chenmingji,您好! 
  有个苯苯的问题想请教一下: 
  如果我在您编写的SMALL RTOS上编写tcp/ip 协议栈(含http)是否可行? 
  如果可行,该方案和不采用RTOS的方案,其效率和费用方面有什么差别? 

我是搞CS的,以前没有搞过单片机,脑袋里面是糊涂的,您的一言将对我将是极大的启示! 
 thank you!! 
答:
    SMALL RTOS是为小ram系统单片机编写的,目前仅在51系列单片机上成功运行,还没有在其它单片机上移植(目前我仅有51和avr的开发系统).在小ram系统单片机如51系列上运行tcp/ip 协议栈是不太现实的.一般tcp/ip 协议栈需要在32位单片机上运行,在8位机上运行太勉强(51是8位机),除非您只运行ip协议.建议使用ucos/ii操作系统或是嵌入式linux,并选用arm或龙珠系列单片机..
     
-------------------------------------------------------------------------------

问:
您好,首先感谢您在C51bbs上无私提供了small rtos for 51的源码,谢谢!
现我有一个问题要请教:在您的软件说明文档中提到:

/////
通过调用OSWait进行任务切换,保存任务环境需要RAM空间为(4+除
OSWait外调用层次*2)字节。通过中断进行任务切换保存任务环境需
要RAM空间为(调用层次*2+15)字节,这15字节包括R0 R7,ACC,B,
 PSW,DPH和DPL。
/////

请问用调用OSWait进行任务切换时,需要保护的任务环境为什么只有那么多?
麻烦请具体说明一下”4“的含义,还有为什么不用保存r0--r7,acc,b等呢?
谢谢!
麻烦请具体说明一下”4“的含义,还有为什么不用保存r0--r7,acc,b等呢?

答:
    我先解释4的问题,其实它是两个调用返回地址,一个是用户任务调用OSWait的返回地址,用户任务调用OSWait时会把它压入堆栈,另一个为OSWait调用OSSched(非中断的任务切换函数)的返回地址,当调用OSWait被唤醒时,从这里开始执行。
    我再解释为什么不用保存r0--r7,acc,b等的问题。这是利用了Keil C51编译器的特性。Keil C51编译器在编译C语言程序时,如果发现一个函数调用了一个复杂的函数,它就认为这个函数返回时r0--r7,acc,b,PSW,DPH和DPL已经变化,因此,它不会在调用复杂函数前用这些寄存器保存有用数据,复杂的函数返回时这些寄存器是什么值不影响程序执行(其它编译器应该是类似的)。我想我已经把这个问题阐述清楚了,如果还有什么疑问,欢迎来email提问,我们共同探讨。
     
-------------------------------------------------------------------------------

问:
你好:
	非常感谢你的回复!
           我现在有个问题想问一下,在OSWait(K_SIG,0)情况下OSWait的第2个参数的含义是什么?
				谢谢你!

答:
    您好!
    OSWait(K_SIG,0)情况下OSWait的第2个参数没有任何意义。
     
-------------------------------------------------------------------------------

问:
明计老师:
    您好,打搅您了,不好意思。
    我看了您的那篇代码公开的small rtos,感觉很有启迪,也很实用,是很不错的一个实时操作系统。
    但我有一些疑虑,想向您请教:
     1。small rtos 是允许中断嵌套的,您说:“通过中断进行任务切换保存任务环境需
要RAM空间为(调用层次*2+15)字节,这15字节包括R0 R7,ACC,B,PSW,DPH和DPL。”这样够用么?是不是应该这样认为:ram空间为(调用层次*15),这样才能保证数据的完整性,是么?但是如果这样的话,假设现在有15个任务出现中断嵌套的话,好像内部ram又不够用了,更不用说具有256级嵌套了。这一点我没有明白您是如何解决的。
     2。我认为应该加上任务的删除功能,因为在实际应用中,有些任务是不需要长时间驻留内存的,譬如有些通信方面的任务,这样可以节省内部ram空间,也可以在任务调度时减少不必要的查询时间,相应的可以提高一些系统的实时性。你说是么?
     3。我不太清楚系统时钟对系统实时性的影响会怎样。资料上表示,系统时钟一般设为10毫秒,而您设为100毫秒,您为什么这样设呢?这样对系统的实时性会有什么样的影响呢?
    这时我的几个疑点,想向您请教。
    总的来说,我认为small rtos再是实行要求不太高,任务数不太多的情况下是很好的一个应用系统。多谢您的研究和开发。

答:
    您好!谢谢您small rtos的关注。对您的问题解答如下:
    1、small rtos在所有中断退出后进行任务切换的。这里所说的“调用层次”是指用户任务在被被高优先级的任务中断时它的函数调用层次,而不是中断嵌套层次(此时所有中断已经退出);“任务环境”是指这个任务再次恢复运行时必须保存的内容。针对cpu,任何时候,最多只有一个任务在运行(不是就绪),此时不论中断嵌套多少层,只是占用这个任务的堆栈,而small rtos 51把所有自由ram分配给正在运行的任务,因此,中断是对应RTOS的,不是对应任务的。当然,中断嵌套太多,ram也不够用的。说得没有什么条理,不知是否明白。
    2、任务的删除功能并不是删除任务代码(它在rom中,删除不了既使在ram中,rtos也不会删除它,不然如何恢复呢?除非你有硬盘,但是但多数单片机不会这么奢侈),仅仅是rtos不再调度它,也不再保存它的任务环境。如果要实现任务的删除功能,就要多分配一些ram空间存储任务状态,调度算法也变得复杂,调度时间反而变长,总的ram占有也未必减少。因此,我没有加入任务的删除功能。你可以使用使任务睡眠和唤醒的方法实现类似功能。
    3、系统时钟的设置是多方面权衡的结果。系统时钟间隔设置短一点,系统是实性好一些,但是cpu效率会低一些;系统时钟间隔设置大一点,系统是实性差一些,但是cpu效率会高一些。我设置为100毫秒,并不是说您必须要设置为100毫秒(我的一个项目中,定时器中断频率为800hz,系统时钟频率为其1/8,我在一个任务中调用OSTimeTick,而不是在定时中断中调用,定时中断只是激活那个任务)。
     
-------------------------------------------------------------------------------

问:
你好:
     再麻烦你一下,源文件中定义的宏
#define OS_TICKS_PER_SEC        10          /* 设置1秒系统系统节拍数
在什么地方使用了?


                    谢谢!!!!!! 

答:
    您好!
    OS_TICKS_PER_SEC暂时没有在small rtos 本身代码中使用。
     
-------------------------------------------------------------------------------

问:
老陈: 
   我用了这个SMALL-RTOS,发现没有设置TIME1(THO,TH1)的值,也只在开始设置为0;那么这个下面定义就没有用了。 
    “#define OS_TICKS_PER_SEC        10        /* 设置1秒系统系统节拍数 ”                 
        
   用户如何定义新系统的节拍呢?还是不需要? 
   谢谢! 

答:
    您好!
    “#define OS_TICKS_PER_SEC        10        /* 设置1秒系统系统节拍数 ”
    只是一个或许未来SMALL-RTOS需要使用到的宏,没有什么实际意义。如何定义新系统的节拍,需要用户个根据系统设计自己解决。
     
-------------------------------------------------------------------------------

问:(注在1.10.4及以上版本只有一个汇编文件,1.11及以上版本ex3和ex4已经合并)
cmj:
    你好,很有幸我得到了你的 small rtos,他的确是个好东西,尤其是对于吾等这些新
手。我粗略的看了一下,现有几个问题想向你请教的。
    1、ex3与ex4的显示为什么不同?就因为它们使用的~~.asm文件不同吗?为什么在
他们的相应文件(ex3.c、ex4.c)里体现不出来呢?他们的~~.asm文件主要差别在那
里?

答:
   您好!
   1、ex3与ex4的显示为不同主要是OS_CFG.H和config.h定义不同。
   ex3的OS_CFG.H中,有如下定义:
   “#define OS_MAX_TASKS            7           /* 最大任务数1~16                                           */”
   ex4的OS_CFG.H中,则为:
   “#define OS_MAX_TASKS            11          /* 最大任务数1~16                                           */”
   ex3的config.h中,有如下定义:
   “void  (* const TaskFuction[OS_MAX_TASKS])(void)={TaskA,TaskB,TaskB,TaskB,TaskB,TaskB,TaskC};”
   ex4的config.h中,则为:
   “void  (* const TaskFuction[OS_MAX_TASKS])(void)={TaskA,TaskB,TaskB,TaskB,TaskB,TaskB,TaskB,TaskB,TaskB,TaskB,TaskC};”
   至于有两个asm文件,主要是为了使用户在不多于8个任务时,节省一些ram和cpu时间占用。
   
   2、TaskB代码被多个任务共享,在ex3中,使用TaskB代码的任务ID为1、2、3、4、5,在ex4中,使用TaskB代码的任务ID为1、2、3、4、5、6、7、8、9;TaskB显示数字。
   3、16任务版的asm文件并非只能使用16个任务,9~16个任务均可,小于9个任务时用8任务版的asm文件。其它参见1和2。
   4、TMOD=(TMOD&0XF0)|0X01是为了只设置time0,不改变time1,您可以根据需要设置。PCON=PCON|0X01雷同,是避免改变其它位。
   5、最后一个任务的编写有以下限制:不能有放弃cpu的企图,换句话说,它必须一直处于就绪状态。没有其它限制。我使用PCON=PCON|0X01是为了使cpu进入节能状态。(这一条仅针对1.10.5及以前版本)

-------------------------------------------------------------------------------

陈老师:
  您好。我是个对RTOS感兴趣的初学者,这里向您请教几个问题。
 
  1 RTOS系统中,程序设计和不用RTOS有什么不同?说简单点就是怎么在RTOS下编程?在您的small
rtos中,怎么设计应用软件?
 
  2 在您提供的示例程序中用到了一个用于pc显示的dll文件,我用keil
c 6.02进行仿真,结果根本没有您所说的pc窗口啊。
注:本来我用 keil c 623和7.0的,为了运行这个特意下载了个6.02.
 
  3. 如果我只是想应用您的这个small
rtos是否需要阅读全部源代码?我大致读了一下您的代码,量很大,尽管您都有详细的注释,可是您是否能够提供比如流程图之类的东西,让读者能够明白您的rtos的运行机制?如果让读者自己分析,确实比较辛苦。
                 谢谢您。

答:
    您好!
    1 这个问题可以专门写文章论述,现在发送以前写的文章给你,它只说明部分问题。
    2 将dll拷贝到keil c51的c51/bin目录下,重起uv2,进入仿真状态,在peripherals菜单下有Virtual Screen菜单,点击它即可。注意使用我提供的工程。6.02我没有试过,6.14肯定行。
    3 果我只是应用,不必阅读全部源代码,看一看使用手册和例子即可。源代码分析暂时不提供。

-------------------------------------------------------------------------------

问:
陈老师:
您的small rtos中OS_CPU.h中有定义这样一个宏
#define  OS_ENTER_CRITICAL()  EA = 0,Os_Enter_Sum++
我看了c语言的语法书 是不是中间该用;而不是对号啊?
对于宏来说 只是替换而已。

答:
   参见C语言中逗号可以把多个语句组成复合语句,请参见c语言语法书。

-------------------------------------------------------------------------------

问:
 是否为笔误? 
  
 OSTsakStackBotton[0] = STACK; 
 OSTsakStackBotton[OS_MAX_TASKS] = (uint8 idata *)(IDATA_RAM_SIZE%256); 

是否为OSTaskStackBotton? 
请查OSStart()函数 

答:
    不是笔误,OSTsakStackBotton定义为OSTsakStackBotton[OS_MAX_TASKS+1],OSTsakStackBotton[OS_MAX_TASKS]保存IDATA的大小(256时为0)。

-------------------------------------------------------------------------------

问:
请问您的 Small RTOS(51) 1.10v 能否提供对硬盘(FAT32)写文件?如何进行?谢谢!

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -