杨为民
发表于 2024-3-31 17:29:22
楼主你好:
(1)我注意到你的RTOS有一个明显的特点,你的整个程序都没有使用“可重入函数”定义。对于使用C51编译器的RTOS,一般而言这个做法是令人震惊的。
(2)比如你的RTOS系统函数:
就没有使用“可重入函数”定义。
但是同样是使用C51编译器的uC/OS-II中的对应函数:
却使用了“可重入函数”定义“reentrant”关键字。
(3)我的问题有两个,首先是你认为你的“OSDelay”函数在实际使用时会发生“重入现象”吗?其次是如果会,你对该函数不使用“可重入函数”定义“reentrant”关键字的理由是什么?能给我们介绍一下吗?
fanxsp
发表于 2024-3-31 17:39:56
杨为民 发表于 2024-3-31 17:29
楼主你好:
(1)我注意到你的RTOS有一个明显的特点,你的整个程序都没有使用“可重入函数”定义。对于使 ...
OSDelay()会发生重入。但是只要这个函数所有的局部变量都是分配在寄存器里面。它就是可重入的。
fanxsp
发表于 2024-3-31 17:41:58
本帖最后由 fanxsp 于 2024-3-31 17:46 编辑
可以通过阅读汇编代码,来确认函数的局部变量是否全部都是分配在寄存器里面的。内核中的所有函数,都已经确认过。
fanxsp
发表于 2024-3-31 18:09:20
本帖最后由 fanxsp 于 2024-3-31 18:12 编辑
fanxsp 发表于 2024-3-31 17:41
可以通过阅读汇编代码,来确认函数的局部变量是否全部都是分配在寄存器里面的。内核中的所有函数,都已经确 ...
优化等级,在使用手册中有明确说明。确认局部变量是否全部分配在寄存器里,也不是很难。只要查看编译器是否给函数生成一个单独的保存局部变量和参数的段,就可以了。
杨为民
发表于 2024-3-31 18:12:01
fanxsp 发表于 2024-3-31 17:41
可以通过阅读汇编代码,来确认函数的局部变量是否全部都是分配在寄存器里面的。内核中的所有函数,都已经确 ...
(1)你的思路是对的,除了“函数的局部变量”还要加上“函数的全部参数”。
(2)你的RTOS很有特点,简单易读。你能分主题(每个主题一个帖子,主题就直接显示在标题中)介绍这些特点吗?
fanxsp
发表于 2024-3-31 18:14:59
本帖最后由 fanxsp 于 2024-3-31 18:26 编辑
杨为民 发表于 2024-3-31 18:12
(1)你的思路是对的,除了“函数的局部变量”还要加上“函数的全部参数”。
(2)你的RTOS很有特点,简 ...
对,参数也是局部变量。确认局部变量是否全部分配在寄存器里,也不是很难。只要查看编译器是否给函数生成一个单独的保存局部变量和参数的数据段,就可以了。
如果有,汇编代码会在需要时把寄存器值保存到这个数据段,那函数就是不可重入的。如果没有这个数据段,函数就是可重入的。
杨为民
发表于 2024-3-31 18:52:32
(1)你采用下图的方式来事先统一规划数据存放区,值得推荐,比uC/OS-II等只是规划了变量的数据类型更进了一步:
(2)我注意的你的堆栈数据好像是放在“pdata”中的,“#define OSLOC_STACKS pdata // 任务堆栈存储位置”。
这种使用方法对于STC8H系列单片机好像很不常见,你能介绍一下你的考虑吗?
fanxsp
发表于 2024-3-31 18:56:24
本帖最后由 fanxsp 于 2024-3-31 19:00 编辑
杨为民 发表于 2024-3-31 18:52
(1)你采用下图的方式来事先统一规划数据存放区,值得推荐,比uC/OS-II等只是规划了变量的数据类型更进了 ...
如果任务堆栈的总数小于 256字节,设为pdata可以减小代码量,和任务堆栈移动所需的时间。如果大于256 字节,要设为xdata。可以先设为pdata,如果编译时提示pdata满,就改为xdata.
神农鼎
发表于 2024-3-31 19:54:31
fanxsp 发表于 2024-3-31 18:56
如果任务堆栈的总数小于 256字节,设为pdata可以减小代码量,和任务堆栈移动所需的时间。如果大于256 字节 ...
我是无理由的反对用 pdata, 防止将来不同的编译器会出错,
另外 STC8H, xdata 和 pdata 的速度差不多
少用 pdata, 这东西现在讲不清了,P2口控制 XRAM 分页,在哪 ?没法讲了
大家再也不要用 pdata
fanxsp
发表于 2024-3-31 20:06:10
本帖最后由 fanxsp 于 2024-3-31 20:10 编辑
神农鼎 发表于 2024-3-31 19:54
我是无理由的反对用 pdata, 防止将来不同的编译器会出错,另外 STC8H, xdata 比 pdata快
pdataxdata用户是可配置的,可以根据实际情况而定。主要原因是,pdata的指针是 1个字节,xdata 的指针是2个字节。
页:
1
2
[3]
4
5
6
7
8
9
10
11
12