找回密码
 立即注册
楼主: 杨为民

STC单片机 uC/OS-II核心技术(12):关于临界区保护和函数可重入的测试题

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-3-24 12:10:43 | 显示全部楼层
tzz1*** 发表于 2024-3-24 10:04
关于库函数个人的一些感想:
    经常在书本上看到表达这样一个意思:合理的利用库函数,不但可以提高效率 ...

我自已用, 怎么方便随意使, 都没问题, 推荐给大家的, 除了提供外挂标准库, 还提供源代码, 用以直接替代标准库函数,

你想用就在项目中加入外挂标准库或源代码, 自动替代原标准库.

不想用就直接删除 外挂标准库或源代码, keil 找不到 外挂标准库或源代码, 就会自动搜寻内部 标准库使用.

用户选择用与不用, 在于用户 是否 在项目中 外挂标准库或源代码, 很简单的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-3-24 12:17:32 | 显示全部楼层
tzz1*** 发表于 2024-3-24 08:34
问:关了中断EA, OS就不能工作了.
答:目前本坛三个常见的RTOS  "FreeRTOS, uCOS, CosyOS" 都依赖中断切换 ...



你好,我新开了一个贴来回答这个问题,你这楼的意见我已复制到
许出题我来答:写(或移植)个 OS系统, 无论何时何地关中断, 都不能影响 OS系统的运行》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7416&page=1&extra=#pid67261
帖子的3楼了。请前往观看,谢谢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-3-24 12:18:34 | 显示全部楼层
fan*** 发表于 2024-3-24 09:14
确实如此,我个人理解,不用太纠结于是否关中断这样的问题,该关还得关。其实是否关中断不是本质,问题的 ...


你好,我新开了一个贴来回答这个问题,你这楼的意见我已复制到
许出题我来答:写(或移植)个 OS系统, 无论何时何地关中断, 都不能影响 OS系统的运行》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7416&page=1&extra=#pid67261
帖子的4楼了。请前往观看,谢谢

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-3-24 12:21:09 | 显示全部楼层
LAO*** 发表于 2024-3-24 03:35
本水贴, 没一点技术含量, 讨论了 N天, 得出一个傻子都会的结论, 使用万金油 关中断.

我是没本事给 X老师 ...


你好,我新开了一个贴来回答你的这个问题,你在这楼出的题目我已复制到
许出题我来答:写(或移植)个 OS系统, 无论何时何地关中断, 都不能影响 OS系统的运行》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7416&page=1&extra=#pid67261
帖子的1楼了。请前往观看,谢谢

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-3-24 12:21:39 | 显示全部楼层
LAO*** 发表于 2024-3-24 09:34
你把我的意思理解错啦~~~

要让你们 OS大虾出马, 当然要有点难度的.


你好,我新开了一个贴来回答你的这个问题,你在这楼出的题目我已复制到
许出题我来答:写(或移植)个 OS系统, 无论何时何地关中断, 都不能影响 OS系统的运行》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7416&page=1&extra=#pid67261
帖子的1楼了。请前往观看,谢谢

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-3-24 12:40:57 | 显示全部楼层
LAO*** 发表于 2024-3-24 03:35
本水贴, 没一点技术含量, 讨论了 N天, 得出一个傻子都会的结论, 使用万金油 关中断.

我是没本事给 X老师 ...

LAOXU,你好,你在这楼出的题目我已经解决了,我的答案已经放在
许出题我来答:写(或移植)个 OS系统, 无论何时何地关中断, 都不能影响 OS系统的运行》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7416&page=1&extra=#pid67261
帖子的2楼了。请你前往进行评判,看我的答案是否及格?谢谢。

=================================================
LAOXU出的“有些难度的题”其实是我早就解决的问题,结果见我2023年10月4日的帖子:
挑战者x51(3):不使用任何中断的uC/OS-II移植版》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4506
帖子的简介如下:
一、梦想照亮现实
(1)有个人说:“我有一个梦”,然后那个梦就实现了。有个网友有个理想:

对于单片机应用中断是最重要的实时响应技术手段。我理解他理想的RTOS系统是:
如果一个硬件中断的条件成立,就应该让该中断立刻发生,实现实时响应。
具体地说,对于STC32G单片机,理想的RTOS系统在任何时候都不应该关闭总中断(EA=0),哪怕关闭的极短的时间也不行,因为这个极短的关闭总中断的时间就成了限制RTOS系统的实时响应时间的上限。
(2)根据前文介绍的中断外任务切换方法,笔者认为V1.20版本的“挑战者x51 uC/OS-II移植版”已经实现了这个理想。
二、不使用任何中断的uC/OS-II移植版
(3)在前文范例的基础上,笔者删去了挑战者x51 V1.10版本中的与中断有关的程序,形成了V1.20版本,形成了本文的范例。





回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:432
  • 最近打卡:2025-05-01 16:19:56

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 2024-3-24 12:54:30 | 显示全部楼层
本帖最后由 CosyOS 于 2024-3-24 13:41 编辑

其实,善用标准库函数,在一定程度上是可以取得良好的效果的。
针对本次的题目,我给出的方法可以称之为“库函数替换法”,把一些不可重入的库函数替换为其它可重入的库函数,实现相同的功能。
不仅是strncpy,还有一些其它的不可重入库函数都可采用该方法。


示例:
strncpy( s1, s2, n )   <==>   memcpy( s1, s2, n )
strncat ( s1, s2, n )   <==>   memcpy( s1 + strlen(s1), s2, n )
strcat   ( s1, s2 )       <==>   strcpy    ( s1 + strlen(s1), s2 )

然而,“替换法”不是万能的,只是在恰当的时候可以应用。
另外,strncpy、strncat,在应用时都需考虑是否要追加字符串尾'\0',因为不同厂家或版本的库函数不一定会不会自动加'\0'。


点评

赞同。 对于实际程序员,编的程序不是用来说服和教育别人的,捡自己掌握的方法和程序用,解决自己实际的问题的方法就是最好的方法  详情 回复 发表于 2024-3-24 13:17
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-3-24 13:17:39 | 显示全部楼层
Cos*** 发表于 2024-3-24 12:54
其实,善用标准库函数,在一定程度上是可以取得良好的效果的。
针对本次的题目,我给出的方法可以称之为“ ...


赞同。
对于实际程序员,编的程序不是用来说服和教育别人的,捡自己掌握的方法和程序用,解决自己实际的问题的方法就是最好的方法
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:454
  • 最近打卡:2025-05-01 08:52:14

3

主题

109

回帖

855

积分

高级会员

积分
855
发表于 2024-3-24 15:07:28 | 显示全部楼层
话说 keil 怎么定义一个可重入函数?

点评

什么意思?是说你自己定义的函数希望成为可重入函数吗?  发表于 2024-3-24 15:12
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:454
  • 最近打卡:2025-05-01 08:52:14

3

主题

109

回帖

855

积分

高级会员

积分
855
发表于 2024-3-24 15:54:39 | 显示全部楼层
fjst*** 发表于 2024-3-24 15:07
话说 keil 怎么定义一个可重入函数?

是的,我是想我自己定义的函数希望成为可重入函数

点评

我尽量简单回答一下吧。 首先要解答一下什么是“可重入函数”? 可重入函数:未被设计用来访问特定的全局公共资源,并且所有形参和局部变量均分配在寄存器或可重入栈中。 C51下: 一、寄存器可重入函数 所有形参  详情 回复 发表于 2024-3-24 16:43
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 06:59 , Processed in 0.175233 second(s), 119 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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