tzz1983
发表于 2024-3-24 08:34:54
本帖最后由 tzz1983 于 2024-3-24 08:48 编辑
LAOXU 发表于 2024-3-24 03:35
本水贴, 没一点技术含量, 讨论了 N天, 得出一个傻子都会的结论, 使用万金油 关中断.
我是没本事给 X老师 ...
问:关了中断EA, OS就不能工作了.
答:目前本坛三个常见的RTOS"FreeRTOS, uCOS, CosyOS" 都依赖中断切换任务。 其中FreeRTOS or STC32G12K128 官方简洁可靠版V1.0.2 ,是基于时钟滴答切换任务。
问:中断是 OS的灵魂, 关闭 EA, OS魂都没了, 还能干啥?
答:中断不仅是OS的灵魂,不使用OS时也同样如此。
中断是一切设计多样性的源泉,同时也是MCU硬件组成部分的重要构件。
现有的OS高度依赖中断,关闭EA会使OS瘫痪。
没有中断时祼机能干的事很多,但枯燥,性能大打折扣。
问:我这道题就是反向思维, 写(或移植)个 OS系统, 离开 EA, 即无论用户何时何地关中断, 都不能影响 OS系统的运行.”
答:比较简单,OS核心就是切换任务,用函数功能代码替代中断可切换任务(主动切换),即可达到OS彻底离开中断的目的。
但是这个没有意义,如问2所说,没有灵魂,没有性能。
打个简单的比方吧,你问STC能不能做出没有中断功能的MCU型号,STC回答你->能! 但会去做吗?
tzz1983
发表于 2024-3-24 09:07:12
CosyOS 发表于 2024-3-23 23:26
首先声明:我所说的方法仅适用于本次讨论的题目,如果换一个题目可能根本就不行了,
具有很强的针对性。
@CosyOS 你这个答案可馋死我了,思考了许久未果。
本以为你会以队列+服务的方式来调用不可重入函数。
但仔细想想也不对呀。如果不用OS,服务必然是一个中断。
但是要使别的中断也能调用这个服务,那服务中断就必须是唯一的最高优先级。
问题又出来了,即是唯一的最高优先,那和关中断就没区别了{:lol:}
fanxsp
发表于 2024-3-24 09:14:15
tzz1983 发表于 2024-3-24 08:34
问:关了中断EA, OS就不能工作了.
答:目前本坛三个常见的RTOS"FreeRTOS, uCOS, CosyOS" 都依赖中断切换 ...
确实如此,我个人理解,不用太纠结于是否关中断这样的问题,该关还得关。其实是否关中断不是本质,问题的本质是系统对异步信号响应的延时时间的长短问题。就算你不关中断,重入的问题还是存在,你也要有相应的措施来处理,这些措施也一样会造成响应的延时,相对而言,关中断可能还会更简单一些。
LAOXU
发表于 2024-3-24 09:34:26
tzz1983 发表于 2024-3-24 08:34
问:关了中断EA, OS就不能工作了.
答:目前本坛三个常见的RTOS"FreeRTOS, uCOS, CosyOS" 都依赖中断切换 ...
你把我的意思理解错啦~~~
要让你们 OS大虾出马, 当然要有点难度的.
再解释一下, 用户使用任何中断, 开关中断, 都与本 OS 无关,
OS的使用与性能, 与现在的通用级 OS标准, 无什么差别,
仅仅强调的是, 用户开关中断, 对 OS无影响, OS该于啥还是干啥.
LAOXU
发表于 2024-3-24 09:55:31
tzz1983
平常我很少用库函数的,这个函数在哪个头文件?或由哪个库函数间接调用的?
---------------------------------------------------------------------------------------------------------------
这是个内嵌函数, 无需库调用, 用与指针类参数写入指定指针.
如要用, 拷贝内容文本以 .A51 后缀存盘即可, 可自行编译成 LIB文件, 使用时将 LIB 或 A51 文件, 加入项目中即可.
我是直接将此 LIB文件, 替换 Keil 标准库后使用, 项目中不用再外挂 LIB 或 A51 文件了.
LAOXU
发表于 2024-3-24 09:58:25
类似这种定义char ** prt, 此类型数据的写入.
tzz1983
发表于 2024-3-24 10:04:26
本帖最后由 tzz1983 于 2024-3-24 10:17 编辑
关于库函数个人的一些感想:
经常在书本上看到表达这样一个意思:合理的利用库函数,不但可以提高效率(大致意思是你很难编写出比库函数更高效的代码了),还能使代码简结,易读。
但是我自己却很少去用库函数,除了printf()之外,基本不用,是不是我的路走偏了{:shy:}
原因是,任何现有的东西,都不可能适应(现有的,未来的)一切。虽然说标准库尽量在往这方面做,但是仍然还是没能够做到。
比如malloc(),用的人少之又少,取而代之的是 OS_malloc(), 或XX_malloc();
我在移值一些通用软件的时候,比如RTOS或GUI,经常发现有类似 xxx_memcpy()这种代码, 为什么他们不直接用memcpy()?估计也是怕万一出什么幺儿子吧。
实战项目中,做一个替代库函数功能的函数并不困难,因为此时已经不需要具备通用性,只需要能适用现有项目即可,比写通用库函数简单多了。
比如显示一个浮点数。除了sprintf(),难道就不能自己实现吗。 如果需要两位小数,最简单的办法就是:(long)(float*100),接下来当整形处理了。(这里是举例,并不是最优)
再如本帖主题中的strncpy(), 执行本地代码 while(n--)*a++=*b++;来替代,没有调用过程,要怎么中断都行,这样真的不香吗。
总结来说就是实战中,不要拘泥于一种形式,无招胜有招! 库函数能适用的,咱就用。不好用的,它就是一个参照,咱自立山头。
说说LAOXU, LAOXU的精神是值得称赞的,这是对广大码农的无私奉献。
我是一个比较务实的人,现在我还没有用到你做的那些功能,所以没有去参照过。如果有一天要用到,必然要去参照一番。这是非常有意义的。
最后,建议你不要直接替代标准库函数,而是提供一套新的库函数。比如strncpy(), 你可以出一个 l_strncpy();
留给用户一个选择的余地。原因无它,使用者都需要谨慎,哪怕是你已经很自信了,仍需要时间的验证。
社区闲人
发表于 2024-3-24 10:41:39
tzz1983 发表于 2024-3-24 10:04
关于库函数个人的一些感想:
经常在书本上看到表达这样一个意思:合理的利用库函数,不但可以提高效率 ...
深有同感!{:victory:}
杨为民
发表于 2024-3-24 11:26:20
本帖最后由 杨为民 于 2024-3-24 12:00 编辑
LAOXU 发表于 2024-3-24 03:35
本水贴, 没一点技术含量, 讨论了 N天, 得出一个傻子都会的结论, 使用万金油 关中断.
我是没本事给 X老师 ...
武林之所以精彩,就是因为有华山论剑!
LAOXU这次题目出得好,使大家有了一个交流的机会。
这次我不太厚道,把你出的题目反考回你,这里给你说抱歉了。
这次你69楼出得题目非常好,我愿意回答。
LAOXU,以后我会针对你的每一个题目,都新开一个专门回答你的帖子,帖子题目将用“许出题我来答”来标识:
(1)以后LAOXU你只管出题,我和广大网友(大家参与)都来回答和讨论。
(2)希望你的题目越难越好,问题的代表性越强越好,能解决新手入门碰到的问题更好,能提前与STC将要推出的两款新类型单片机结合最好。
(3)你提的问题可以你自己暂时还不能回答的,我的帖子只回答和讨论(大概率我也回答不了)你的问题,绝不再要求你回答,你的身份就是“考官”,我回答出了算我及格。
(4)如果你知道答案:
第一种方法是先你给出你知道的所有答案。评判的标准是我必须用另外一种方法来解决问题,我想不出新方法算我输,我想出了算我赢。
第二种方法是你先别说,也别提示,让大家讨论。我答不出算我输,答出了算我赢。我答出了后,你再公布你的答案,算我们平手。
(5)这种形式是单向的,你问我答,我不会向你提问的。
同时也欢迎各位网友也直接向我提问,我相信你的问题也会是其他网友感兴趣或者同样面临的,我会新开一个帖子来回答你,帖子题目将用“你问我答:”来标识。
CosyOS
发表于 2024-3-24 12:01:47
LAOXU 发表于 2024-3-24 06:58
你好 !
有一个问题, 一直想和你核实,
你在 CosyOS中, PendSV_Handler 使用INT0中断,是否意味着用户不能 ...
是的。
所以该功能可配置,用户应选择一个不使用的硬件中断,对应的端口也不能使用。
另外对该中断还有要求:
1、必须支持置标志位触发,而不是IO口电平触发;
2、在关闭该中断的前提下,置标志位后再开启该中断,可以响应中断。
页:
1
2
3
4
5
6
7
[8]
9
10