杨为民
发表于 2024-3-22 18:16:33
LAOXU 发表于 2024-3-22 17:28
既然杨老师要讨论, 顶楼的题太简单了, 只有2次调用.
现改成, 51有 4个中断级, 每个中断优先级中 有一次调 ...
谢谢回答。
(1)你想提高题目的难度,我成全你,我修改后放在在顶楼。
(2)你给出的方法是“把这个函数写成可重入的, 无论 N次调用都不会出问题”。虽然你的这个方法也适用于新题目,但是你的这个方法对于新手太难了。你能不能为使用C51标准库函数对STC8位单片机编程的新手重新推荐一些更简单的方法?
LAOXU
发表于 2024-3-22 18:18:25
大家说, 麻烦吗?
还不如用 251(STC32) ,什么都不用管, 编译后就 OK {:victory:}
杨为民
发表于 2024-3-22 18:38:03
LAOXU 发表于 2024-3-22 17:33
最简单的方法,
在底层(主程序)中, 调用前先关中断, 执行调用 strncpy , 调用后再打开中断 ...
谢谢。
(1)为了新手能够理解下面将你的方法“最简单的方法,在底层(主程序)中, 调用前先关中断, 执行调用 strncpy , 调用后再打开中断”写成程序:
void main(void)
{do{
EA=0;
strncpy (cc, a2, 8);
EA=1;
}while(1);
}
(2)既然解决的方法那么简单,你又早就知道,你装神弄鬼地在你的《C51 和 C251 标准库的区别》那个帖子里借你老师的口吓唬大家干什么?为什么不一开始就告诉新手怎么解决?你还出题目考我,不就是想炫耀你会用汇编编个字符串函数?你的目的达到了,我们大家都知道了。
(3)我问你:你的提高难度那个4个不同中断优先级的中断都调用同一个不可重入函数的题目,除了你知道的那个只有你会用汇编语言“改写函数的方法”,你还知道其他“不改写函数的方法”的方法吗?
如果你知道,就请你在这里告诉大家,如果不知道,那大家再一起来研究。请你直接回答知道不知道?
杨为民
发表于 2024-3-22 18:41:57
LAOXU 发表于 2024-3-22 18:18
大家说, 麻烦吗?
还不如用 251(STC32) ,什么都不用管, 编译后就 OK
你老再你的帖子里不是对我说:
你老跑题啦~~~ 咱们现在说 keil C51怎么解决.
那么请你别双标,请你也别跑题,说说“C51怎么解决”
杨为民
发表于 2024-3-22 18:56:24
LAOXU 发表于 2024-3-22 17:28
既然杨老师要讨论, 顶楼的题太简单了, 只有2次调用.
现改成, 51有 4个中断级, 每个中断优先级中 有一次调 ...
我已经把新题目放在1楼了,请检查下是否符合你的要求
CosyOS
发表于 2024-3-22 21:21:39
本帖最后由 CosyOS 于 2024-3-22 21:36 编辑
这两个题目,只有题目2,可能会出现对a2数组的重入读访问,但“读读”是不怕重入的;
除此之外都不存在对全局资源(各个数组)的重入访问,所以两个题目都不需要考虑对全局资源(各个数组)的互斥访问问题,
只需解决“strncpy”是不可重入函数的问题,设法让其可重入即可。
针对这两个题目,的确有一个最简单的方法,即不用关中断,也不用临界区等,更不用重写strncpy。
我还是不要说了,留给其他朋友思考吧。。。
CosyOS
发表于 2024-3-22 21:47:12
本帖最后由 CosyOS 于 2024-3-22 21:49 编辑
CosyOS 发表于 2024-3-22 21:21
这两个题目,只有题目2,可能会出现对a2数组的重入读访问,但“读读”是不怕重入的;
除此之外都不存在对全 ...
不是的,禁用overlay解决不了这个问题。
如果谁知道答案也请不要说出来,好让更多的朋友有机会思考。
tzz1983
发表于 2024-3-22 21:55:44
CosyOS 发表于 2024-3-22 21:47
不是的,禁用overlay解决不了这个问题。
如果谁知道答案也请不要说出来,好让更多的朋友有机会思考。
...
有意思,
如果是我, while(n--)*a++=*b++;
这应该不算答案吧,这算重写了
{:lol:}
继续等你们的答案
杨为民
发表于 2024-3-22 23:10:29
CosyOS 发表于 2024-3-22 21:21
这两个题目,只有题目2,可能会出现对a2数组的重入读访问,但“读读”是不怕重入的;
除此之外都不存在对全 ...
别说出来:
(1)别让LAOXU知道。
(2)相信我,留给我说会比你说得更好
杨为民
发表于 2024-3-22 23:11:45
tzz1983 发表于 2024-3-22 21:55
有意思,
如果是我, while(n--)*a++=*b++;
这应该不算答案吧,这算重写了
你也别说:
(1)别让LAOXU知道。
(2)相信我,留给我说会比你说得更好
页:
1
[2]
3
4
5
6
7
8
9
10