大家来接蜜: os 大泻蜜...............................................

[复制链接]
21482|130
Cortex-M0 发表于 2011-11-10 18:40 | 显示全部楼层
highgear的程序写的很规范  

comtex-mo写的程序很不规范    属于初学者水平也不到 :victory:
xlsbz 发表于 2011-11-10 16:17



LS正解,加分~~~

highgear老师属于职业高手,程序当然写的漂亮,多一个字符显啰嗦,少一个字符则杯具,思路超级清晰。

俺不搞技术,纯粹将highgear老师的垫底的小儿科作品拿来学习练手,领会消化一下highgear老师高超的编程技术。

评分

参与人数 1威望 +1 收起 理由
渤海三叠浪 + 1

查看全部评分

Cortex-M0 发表于 2011-11-10 18:59 | 显示全部楼层
123JJ写得好,学习了。
还是有一个问题,不嵌入汇编,中断里要保存所有寄存器,是不是要故意在中断里使用所有寄存器。
DownCloud 发表于 2011-11-10 16:13



非也~~~

俺也没有特别行之有效之法,常用方法有三。

方法1:
在程序中适当加入一点简短变量赋值,让Keil C51将所有压栈变量扫到位,中断就全部压栈了。

方法2:
将中断程序建库,由于和其他程序的关联让Keil C51暂时摸不清头脑,结果就将全部压栈了。

方法3:
手工添加。
刘前辈 发表于 2011-11-10 19:35 | 显示全部楼层

西安农民工的程序修改好了。

本帖最后由 刘前辈 于 2011-11-10 19:41 编辑
#71楼highgear
    农民工的意思大概是想利用中断来切换任务,但有几个问题:51的中断如果没有 reti 则不会再次响应;
即便调用一次 reti 开放中断, 因为任务的死循环,堆栈最终会溢出。

.
.
   堆栈溢出是菜鸟编程结果。看咱从来不溢出。
.

  1. #include <reg51.h>
  2. #include <ABSACC.H>

  3. bit LED = 0;
  4. unsigned char TaskID = 0;
  5. unsigned char TimerCount = 0;

  6. void Task1();
  7. void Task2();
  8. code void (code *pTask[2])()={Task1,Task2};

  9. void Timer0Init()
  10. {
  11.         TMOD=0x01;
  12.         TH0=(65536-50000)/256;
  13.         TL0=(65536-50000)%256;
  14.         TR0=1;
  15.         ET0=1;
  16.         EA=1;
  17. }

  18. void TaskSwitch()
  19. {  
  20.     TaskID = (TaskID + 1);         
  21.    if(2 == TaskID) TaskID = 0;
  22.         //(*pTask[TaskID])();   
  23. }

  24. void Task1()
  25. {
  26.     while(1)
  27.         {
  28.            P1 = 0X0F;
  29.                   }
  30. }
  31. void Task2()
  32. {
  33.     while(1)
  34.         {
  35.             P1 = 0XF0;
  36.          }
  37. }

  38. void main()
  39. {
  40.    Timer0Init();
  41.    //pTask[0] = Task1;
  42.    //pTask[1] = Task2;
  43.    (*pTask[0])();
  44. }

  45. void  t0_BH(void)
  46. {
  47.         TR0=0;
  48.         TH0=(65536-50000)/256;
  49.         TL0=(65536-50000)%256;
  50.         //TF0 = 0;
  51.                 TR0=1;
  52.         
  53.         TimerCount ++ ;
  54.         if(TimerCount >= 10)     /* 1s任务调度一次 */
  55.         {
  56.              LED = 1;
  57.              TimerCount = 0;
  58.                 TaskSwitch();
  59.          }
  60. }

  61. void t0(void) interrupt 1 using 1
  62. {
  63. t0_BH();

  64. if(LED)
  65. {
  66. LED=0;
  67. //TaskID = (TaskID + 1)%2;   
  68. T0_ISR.temp=pTask[TaskID];

  69. SP-=5;     // 指向栈底

  70. DBYTE[SP]=T0_ISR.tmp[1];
  71. SP++;
  72. DBYTE[SP]=T0_ISR.tmp[0];    //高地址在栈顶
  73.   SP+=4;
  74. }
  75. }



、、

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
guangmangdz 发表于 2011-11-10 19:49 | 显示全部楼层
顶一下,顺便提及一下我的Raysrtos
fu10 发表于 2011-11-10 19:54 | 显示全部楼层
学习OS的人真多,俺来凑凑热闹.....:lol
 楼主| highgear 发表于 2011-11-10 22:11 | 显示全部楼层
我做完这 os 后, 只是经过了简单的测试,bug估计是难免的。好在程序异常简单,很容易调试。

至于DownCloud的不用汇编保存其他寄存器的问题,办法就是 123jj 在 102 楼的办法,没有什么更好的办法。Turbo C把全部寄存器,不管用到还是没用到,都压入栈中,而keil没有这样做,也不能这么做,_push_ /_pop_ 不支持 0x80 以下的寄存器保存, 所以手工嵌入汇编应该是最直接的方法了.


顶104楼的光芒实时系统RaySRTOS
 楼主| highgear 发表于 2011-11-10 22:25 | 显示全部楼层
好吧,我也来给这个 os 其一个名字,叫 OS extreme, 简称 OSex :P

开个玩笑,别当真。

评分

参与人数 1威望 +1 收起 理由
渤海三叠浪 + 1

查看全部评分

DownCloud 发表于 2011-11-11 00:12 | 显示全部楼层
123JJ的程序相比highgear读起来比较不轻松一点点,但也还行,我等菜鸟还是能很轻松的读完。绝非属于初学者水平,这话说的。。。由于是在别人程序基础上改,自然有些生硬,可以理解。
就是我感觉中断执行时间太长,占有资源特多,特别是任务多时,由此可见,51实在难承受操作系统,验证了highgear老师的话。
Cortex-M0 发表于 2011-11-11 05:37 | 显示全部楼层
51的设计师根本没想到过,现在被你们装入那么多的任务在玩~~~  ;P
3115599 发表于 2011-11-11 08:40 | 显示全部楼层
ZPW-2000闭环电码化系统运用中存在问题的分析及改进
xinmeitai 发表于 2011-11-11 11:23 | 显示全部楼层
顶一下
 楼主| highgear 发表于 2011-11-11 22:46 | 显示全部楼层
看了103楼刘工改过的代码,就知道刘工为何不展示代码。就那么一点点改过的代码,把水平暴露无遗。
luoru12 发表于 2011-11-13 12:53 | 显示全部楼层
luoru12 发表于 2011-11-13 12:53 | 显示全部楼层
luoru12 发表于 2011-11-13 12:54 | 显示全部楼层
神马东西啊   不懂啊
luoru12 发表于 2011-11-13 12:54 | 显示全部楼层
神马东西啊   不懂啊:L
linty8433 发表于 2011-11-13 14:02 | 显示全部楼层
我也来顶一个,希望楼主发完
DownCloud 发表于 2011-11-13 14:54 | 显示全部楼层
O Sex ???
刘前辈 发表于 2011-11-14 19:30 | 显示全部楼层
alamo2009 发表于 2011-11-14 23:00 | 显示全部楼层
本帖最后由 alamo2009 于 2011-11-15 12:14 编辑
“程序当然写的漂亮,多一个字符显啰嗦,少一个字符则杯具,思路超级清晰”
Cortex-M0 发表于 2011-11-10 18:40


我大笑一声,哈哈哈哈哈哈!!!
赤果果的!
果然是“屁精辈出”!

评分

参与人数 2威望 +2 收起 理由
刘前辈 + 1
bhsdlmj + 1

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部