找回密码
 立即注册
楼主: fanxsp

原创极简的51-MCU专用RTOS TinyRTOS51

  [复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-5-8 12:30:20 | 显示全部楼层
fan*** 发表于 2024-5-8 12:21
还是要关总中断的,只是在任务切换过程,不用全程关总中断,只关一小段时间。 ...

再试试,我认为你写的和tzz1983移植到STC8H上的uC/OS都可以实现“不关闭总中断”的版本

点评

我有关中断的,只是切换上下文时没有关中断,而访问OS核心全局变时是短暂的关中断的, 写?C_XBP无法用一条指令完成,也是关中断写的。 这个和CosyOS是不一样。 CosyOS 那种理论是没有问题的,用不用那是取舍的问题  详情 回复 发表于 2024-5-8 12:38
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-5-8 12:38:34 | 显示全部楼层
杨*** 发表于 2024-5-8 12:30
再试试,我认为你写的和tzz1983移植到STC8H上的uC/OS都可以实现“不关闭总中断”的版本
...

我有关中断的,只是切换上下文时没有关中断,而访问OS核心全局变时是短暂的关中断的, 写?C_XBP无法用一条指令完成,也是关中断写的。 这个和CosyOS是不一样。

CosyOS 那种理论是没有问题的,用不用那是取舍的问题, 而不是对错的问题。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:440
  • 最近打卡:2025-05-02 07:51:43

3

主题

125

回帖

1270

积分

金牌会员

积分
1270
发表于 2024-5-8 14:09:35 | 显示全部楼层
支持支持,强烈支持
You can you up!~No can no BB!~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-01 14:43:21

1

主题

183

回帖

1863

积分

金牌会员

积分
1863
发表于 2024-5-8 16:59:26 | 显示全部楼层
本帖最后由 fanxsp 于 2024-5-8 17:00 编辑
tzz1*** 发表于 2024-5-8 09:50
我发现你的进出临界区的代码很高效。所以我新做的移植参照你的临界区的做法。

现在发现一个有意思的小细 ...

#include <reg51.h>

void main(void)
{
        unsigned char sum ;
        
        EA = 0 ;
        sum++ ;
        
        if(--sum == 0) EA = 1 ;
        
        if(!(--sum)) EA = 1 ;
}

        RSEG  ?DT?main?MAIN
?main?BYTE:
        sum?040:   DS   1
; #include <reg51.h>
;
; void main(void)

        RSEG  ?PR?main?MAIN
main:
                        ; SOURCE LINE # 3
; {
                        ; SOURCE LINE # 4
;         unsigned char sum ;
;         
;         EA = 0 ;
                        ; SOURCE LINE # 7
        CLR          EA
;         sum++ ;
                        ; SOURCE LINE # 8
        INC          sum?040
;         
;         if(--sum == 0) EA = 1 ;
                        ; SOURCE LINE # 10
        DJNZ         sum?040,?C0001
        SETB         EA
?C0001:
;         
;         if(!(--sum)) EA = 1 ;
                        ; SOURCE LINE # 12
        DJNZ         sum?040,?C0003
        SETB         EA
;         
; }                        ; SOURCE LINE # 14
?C0003:
        RET         
; END OF main

        END
我用这个最简单的程序,编译结果是一样的,你有空的话,再试一下。

点评

?PR?main?MAIN SEGMENT CODE ?DT?main?MAIN SEGMENT DATA OVERLAYABLE EXTRN CODE (?C_STARTUP) PUBLIC main RSEG ?DT?main?MAIN ?main?BYTE: sum?040: DS 1 ; ; #include ; ;  详情 回复 发表于 2024-5-8 19:00
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-5-8 19:00:03 | 显示全部楼层
fan*** 发表于 2024-5-8 16:59
#include

void main(void)

?PR?main?MAIN        SEGMENT CODE
?DT?main?MAIN        SEGMENT DATA OVERLAYABLE
        EXTRN        CODE (?C_STARTUP)
        PUBLIC        main

        RSEG  ?DT?main?MAIN
?main?BYTE:
        sum?040:   DS   1
;
; #include <reg51.h>
;
;
; void main(void)

        RSEG  ?PR?main?MAIN
main:
        USING        0
                        ; SOURCE LINE # 5
; {
                        ; SOURCE LINE # 6
;     unsigned char sum ;
;         
;     EA = 0 ;
                        ; SOURCE LINE # 9
        CLR          EA
;     sum++ ;
                        ; SOURCE LINE # 10
        INC          sum?040
;         
;     if(--sum == 0) EA = 1 ;
                        ; SOURCE LINE # 12
        DEC          sum?040
        MOV          A,sum?040
        JNZ          ?C0001
        SETB         EA
?C0001:
;         
;     if(!(--sum)) EA = 1 ;
                        ; SOURCE LINE # 14
        DJNZ         sum?040,?C0003
        SETB         EA
; }                        ; SOURCE LINE # 15
?C0003:
        RET         
; END OF main

        END
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-01 14:43:21

1

主题

183

回帖

1863

积分

金牌会员

积分
1863
发表于 2024-5-8 19:36:59 | 显示全部楼层
截图202405081935518706.jpg

编译器 版本  一样的啊,真是莫明其妙啊
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-01 14:43:21

1

主题

183

回帖

1863

积分

金牌会员

积分
1863
发表于 2024-5-8 19:49:34 | 显示全部楼层
本帖最后由 fanxsp 于 2024-5-8 19:56 编辑


点评

可以了,和你的结果是一样的, 你把两个附件撤了吧  详情 回复 发表于 2024-5-8 19:56
应该是我有两年没更新了,刚才官网上看了一下,ARM C51 C251 都比我用的新  详情 回复 发表于 2024-5-8 19:51
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-5-8 19:51:10 | 显示全部楼层

应该是我有两年没更新了,刚才官网上看了一下,ARM C51 C251 都比我用的新
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-5-8 19:56:34 | 显示全部楼层

可以了,和你的结果是一样的, 你把两个附件撤了吧
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-01 14:43:21

1

主题

183

回帖

1863

积分

金牌会员

积分
1863
发表于 2024-5-9 07:48:37 | 显示全部楼层
tzz1*** 发表于 2024-5-8 19:56
可以了,和你的结果是一样的,  你把两个附件撤了吧

这样看来,还是写成 if(!(--EnterSum)), 这种形式更靠谱一些,if(--EnterSum == 0)  这种形式,可能有些版本,不会优化。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 09:05 , Processed in 0.136475 second(s), 117 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表