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

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

[复制链接]
  • TA的每日心情
    开心
    昨天 00:57
  • 签到天数: 148 天

    [LV.7]常住居民III

    39

    主题

    889

    回帖

    4154

    积分

    荣誉版主

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

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

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

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

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

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

    积分
    10908
     楼主| 发表于 2024-3-24 12:17:32 | 显示全部楼层
    tzz1983 发表于 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楼了。请前往观看,谢谢
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

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


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

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

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

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


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

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

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

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


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

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

    积分
    10908
     楼主| 发表于 2024-3-24 12:40:57 | 显示全部楼层
    LAOXU 发表于 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版本,形成了本文的范例。





    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 12:52
  • 签到天数: 175 天

    [LV.7]常住居民III

    5

    主题

    580

    回帖

    2355

    积分

    荣誉版主

    积分
    2355
    发表于 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
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    63

    主题

    703

    回帖

    1万

    积分

    荣誉版主

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


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

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 09:02
  • 签到天数: 143 天

    [LV.7]常住居民III

    2

    主题

    53

    回帖

    378

    积分

    中级会员

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

    点评

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

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 09:02
  • 签到天数: 143 天

    [LV.7]常住居民III

    2

    主题

    53

    回帖

    378

    积分

    中级会员

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

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

    点评

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-20 01:21 , Processed in 0.069119 second(s), 65 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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