找回密码
 立即注册
楼主: 熊***

最新版本uC-OS2-2.93.01已移植到STC8上,请帮忙查错

[复制链接]

该用户从未签到

11

主题

331

回帖

886

积分

荣誉版主

积分
886
 楼主| 发表于 2023-9-13 08:33:51 | 显示全部楼层
本帖最后由 熊仔 于 2023-9-13 08:39 编辑
杨为民 发表于 2023-9-13 00:03
楼主移植的uCOSII-STC8-V1.05版本范例中ISR程序存在着不规范性(也可以说是BUG),这是由于移植者没有按照u ...

这个真不是bug,特意给出的中断不能嵌套演示例子。



莫非杨老师没看明白我这个两个例子是干嘛的?不应该呀。之前还评论说很正确。
定时器1演示中断嵌套
定时器3演示中断不能嵌套。既然知道不能嵌套了,干嘛还要调用 os进出中断函数呢?

其实还有一个例子屏蔽了。之前不是说有用户必须用到其他寄存器组咋办

; ==== 定时器3 中断服务程序 =============
;演示使用寄存器组1,加快中断执行速度,必须禁止中断嵌套。


对于一些要求很高的场合,比如要求中断时间只能几个us完成的,不能调用os进出中断函数,调用的话即便没有任务切换,也是需要好几us时间。
当然如果有任务切换,需要处理的时间更多。
导致后面的中断到了不能及时处理,可能丢失部分紧急数据。这种情况就需要把优先级设为更高,然后不能中断嵌套。

结论:是否需要中断嵌套,还得按照项目实际要求弄。

回复 支持 反对 送花

使用道具 举报

该用户从未签到

63

主题

703

回帖

1万

积分

荣誉版主

积分
10900
发表于 2023-9-13 08:55:40 | 显示全部楼层
熊仔 发表于 2023-9-13 08:33
这个真不是bug,特意给出的中断不能嵌套演示例子。

回复 支持 反对 送花

使用道具 举报

该用户从未签到

11

主题

331

回帖

886

积分

荣誉版主

积分
886
 楼主| 发表于 2023-9-13 09:23:08 | 显示全部楼层
其实陈是知移植版本中断处理本身有bug。应该在通知内核进入中断后,打开中断,允许中断嵌套。

截图202309130921594746.jpg
正确的做法是按照本移植的案例:
截图202309130922541266.jpg




点评

你们的规范为什么要在中断ISR中开关EA呢?看看我的这个规范,不用打开也行呀 [attachimg]21091[/attachimg]  详情 回复 发表于 2023-9-13 12:15
回复 支持 反对 送花

使用道具 举报

该用户从未签到

63

主题

703

回帖

1万

积分

荣誉版主

积分
10900
发表于 2023-9-13 12:15:20 | 显示全部楼层
熊仔 发表于 2023-9-13 09:23
其实陈是知移植版本中断处理本身有bug。应该在通知内核进入中断后,打开中断,允许中断嵌套。

你们的规范为什么要在中断ISR中开关EA呢?看看我的这个规范,不用打开也行呀

Fig_04_杨为民.jpg

点评

这个方案我之前也弄过,我也有给一个修改后的例子。应该是在杨老师的移植版本交流里面有。这部分1楼的第六点有介绍。  发表于 2023-9-13 13:07
回复 支持 反对 送花

使用道具 举报

该用户从未签到

11

主题

331

回帖

886

积分

荣誉版主

积分
886
 楼主| 发表于 2023-9-13 22:51:09 | 显示全部楼层
本帖最后由 熊仔 于 2023-9-13 23:21 编辑

V1.06版本
1.增加可选支持双数据指针,需配置宏USE_DUAL_DPTR   
2.增加可选支持访问全部扩展的64K XRAM空间,需配置宏 ACCESS_FULL_64K_XDATA
3.重新整理代码新增os_cpu_i.h文件,实现宏定义PUSHALL POPALL


本来9月1日就移植好的,最近研究了下双DPTR改写string函数,本来想全部移植完毕才分享的。目前完成memcpy  ,memmovestrcpy  3个函数,最近项目忙,没时间移植剩余的函数,以后再分享这部分。
双DPTR的使用心得看另一篇帖子:https://www.stcaimcu.com/forum.p ... &extra=page%3D1
双DPTR使用用注意事项:写保护模式下只能同时使能AU0和AU1。单独使能需要对TA寄存器操作。之前对DPTR_AUTO_INC宏的处理就是结合TA寄存器操作的,但是发现出栈的时候挺麻烦的,需要配合TA。
然而通过修改string.h里面的函数测试,AU1 和AU0 同时使能方式,完全没有问题。

所以这次改为对AU1 和AU0 同时使能方式,出栈就一条指令POP  DPS完成对DPS赋值。

整理代码
1)把USING 0只放在两个宏PUSHALL和POPALL开始位置,其他位置都删除了。
2)宏PUSHALL和POPALL放在文件os_cpu_i.h方便管理。
截图202309132248336413.jpg

3)DPTR_AUTO_INC,USE_DUAL_DPTR,ACCESS_FULL_64K_XDATA放在文件os_cfg.h,方便管理。
有考虑过DPTR_AUTO_INC和USE_DUAL_DPTR合并在一起,后面想如果使用者不用USE_DUAL_DPTR,单独切换任务函数使用也行。最终保留。
截图202309132250128071.jpg


4)对OSTaskStkInit函数修改
截图202309132320313247.jpg







回复 支持 反对 送花

使用道具 举报

该用户从未签到

20

主题

573

回帖

1185

积分

荣誉版主

积分
1185
发表于 2023-9-15 21:03:54 | 显示全部楼层
熊仔,你好, 你移值的这个版本应该是可以支持多优先级嵌套的吧.
我有一个关于中断嵌套比较刁钻的问题想问你: 中被响应后,第一条被执行的指令是向量入口那条转移指令, 执行完后转移到了真正的中断代码那里去了, 中断代码里, 第一条一般是OSIntEnter(); 或者直接 OSIntNesting++ .
在执行第一条转移指令时, 假如此时正好有一个高级中断标志置位并且被硬件查询到, 这时会不会可以响应更高级的优先级中断?  此时EA是开的, 并且转移指令也没说有推迟中断响应的功能.按正常的分析来说, 应该是可以响应.(我没有去实测,也没去查相关资料,只是觉得应该可以响应, 所以就来问你一下)
但是如果此时是可以响应更高优先级中断的话, 那么就来活了. OSIntNesting++ 还没加呢, 怎么办?


回复 支持 反对 送花

使用道具 举报

该用户从未签到

11

主题

331

回帖

886

积分

荣誉版主

积分
886
 楼主| 发表于 2023-9-15 21:41:46 | 显示全部楼层
本帖最后由 熊仔 于 2023-9-15 21:46 编辑

这个问题我之前想过,例子也弄了。直接在入口OSIntNesting++,或者EA=0,后面使用OSIntEnter();
之前2.91版本的例子
截图202309152146211919.jpg


后面感觉一般都怎么弄,没必要这么讲究。所以改回了普通版本。

回复 支持 反对 送花

使用道具 举报

该用户从未签到

11

主题

331

回帖

886

积分

荣誉版主

积分
886
 楼主| 发表于 2023-9-15 21:50:35 | 显示全部楼层
如果真的考虑这么细,可以这样做。
这样肯定没有问题了。中断入口第一条OSIntNesting++。高优先级打断也没有问题。最保险的做法。
回复 支持 反对 送花

使用道具 举报

该用户从未签到

20

主题

573

回帖

1185

积分

荣誉版主

积分
1185
发表于 2023-9-15 21:55:50 | 显示全部楼层
我现在不能证实, 我在家里没设备, 不能用硬件访真测试一下, 明天上班了我去测一下, 我想测试方法也比较简单, 在main函数内 按顺序 TF0=1; EA=1; 引接着 goto xxx; 此时 goto 指令是一定可以执行到的, 关键是看 先执行GOTO指令的下一条指令, 还是先转到中断向量, 如果是转到中断向量,那就.....
回复 支持 反对 送花

使用道具 举报

该用户从未签到

20

主题

573

回帖

1185

积分

荣誉版主

积分
1185
发表于 2023-9-15 22:02:59 | 显示全部楼层
我一直都有这个疑问, REIT和访问IE,IP的指令有延迟中断响应的效果, 转移指令也应该要有这个效果才对, 就是没去证实, 这几天被杨老师带坏了, 弄了几天的贴, 这种感觉越来越强烈了, 明天一定要去试一下
回复 支持 反对 送花

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 08:55 , Processed in 0.081063 second(s), 71 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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