Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[libc][keil]实现_sys_tmpnam()函数 #4339

Merged
merged 2 commits into from
Feb 15, 2021
Merged

[libc][keil]实现_sys_tmpnam()函数 #4339

merged 2 commits into from
Feb 15, 2021

Conversation

mysterywolf
Copy link
Member

@mysterywolf mysterywolf commented Feb 14, 2021

拉取/合并请求描述:(PR description)

[
实现_sys_tmpnam()函数
已经在keil上编译通过
已经在潘多拉上测试通过
#4337
]

以下的内容不应该在提交PR时的message修改,修改下述message,PR会被直接关闭。请在提交PR后,浏览器查看PR并对以下检查项逐项check,没问题后逐条在页面上打钩。
The following content must not be changed in the submitted PR message. Otherwise, the PR will be closed immediately. After submitted PR, please use a web browser to visit PR, and check items one by one, and ticked them if no problem.

当前拉取/合并请求的状态 Intent for your PR

必须选择一项 Choose one (Mandatory):

  • 本拉取/合并请求是一个草稿版本 This PR is for a code-review and is intended to get feedback
  • 本拉取/合并请求是一个成熟版本 This PR is mature, and ready to be integrated into the repo

代码质量 Code Quality:

我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:

  • 已经仔细查看过代码改动的对比 Already check the difference between PR and old code
  • 代码风格正确,包括缩进空格,命名及其他风格 Style guide is adhered to, including spacing, naming and other styles
  • 没有垃圾代码,代码尽量精简,不包含#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up
  • 所有变更均有原因及合理的,并且不会影响到其他软件组件代码或BSP All modifications are justified and not affect other components or BSP
  • 对难懂代码均提供对应的注释 I've commented appropriately where code is tricky
  • 本拉取/合并请求代码是高质量的 Code in this PR is of high quality

@DavidLin1577
Copy link
Contributor

DavidLin1577 commented Feb 15, 2021

SYS_TMPNAM (0x0D)
Home » What is Semihosting? » SYS_TMPNAM (0x0D)

11.25 SYS_TMPNAM (0x0D)
Returns a temporary name for a file identified by a system file identifier.

Entry
On entry, R1 contains a pointer to a three-word argument block:
word 1
A pointer to a buffer.
word 2
A target identifier for this filename. Its value must be an integer in the range 0 to 255.
word 3
Contains the length of the buffer. The length must be at least the value of L_tmpnam on the host system.
Return
On exit, R0 contains:
0 if the call is successful
–1 if an error occurs.
The buffer pointed to by R1 contains the filename, prefixed with a suitable directory name.
If you use the same target identifier again, the same filename is returned.

@mysterywolf 看了keil的编译文档,该函数执行成功的返回值应该是0,而不是1,请再确认一下。
https://www.keil.com/support/man/docs/armcc/armcc_pge1358787061235.htm

@mysterywolf
Copy link
Member Author

@DavidLin1577 你好,你貌似找错文档了。
微信截图_20210215144935

@DavidLin1577
Copy link
Contributor

@DavidLin1577 你好,你貌似找错文档了。
微信截图_20210215144935

@mysterywolf 对,我认为这个函数注释也是错误的,因为这是对armlibc库的实现,所以最终参考应该是以keil arm相关文档为准。

@mysterywolf
Copy link
Member Author

@DavidLin1577 你好,我之前翻过文档,但是实际的.h给出的定义与文档存在冲突。文档中规定的是void没有返回值,你找出的那个不是底层函数的定义,你翻错页了。
微信截图_20210215150759

@DavidLin1577
Copy link
Contributor

DavidLin1577 commented Feb 15, 2021

@DavidLin1577 你好,我之前翻过文档,但是实际的.h给出的定义与文档存在冲突。文档中规定的是void没有返回值,你找出的那个不是底层函数的定义,你翻错页了。
微信截图_20210215150759

@mysterywolf 是的,我看了最新的Arm Compiler Arm C and C++ Libraries and Floating-Point Support User Guide Version 6.6,里面已经没有返回值了,前面的文档是keil的,搞错了,arm的文档已经在版本6去掉返回值了,建议把它同步到最新arm文档描述,包括注释。

@mysterywolf
Copy link
Member Author

mysterywolf commented Feb 15, 2021

建议把它同步到最新arm文档描述,包括注释。
@DavidLin1577 你好这句话我没懂什么意思,请详细说一下,arm的文档我怎么会有编辑权限

@DavidLin1577
Copy link
Contributor

建议把它同步到最新arm文档描述,包括注释。
@DavidLin1577 你好这句话我没懂什么意思,请详细说一下,arm的文档我怎么会有编辑权限

@mysterywolf
你好,建议是函数类型进行变更,包括.h和.c
int _sys_tmpnam(char *name, int fileno, unsigned maxlength) -> void_sys_tmpnam(char *name, int fileno, unsigned maxlength)
函数内部去掉return 1;
注释部分也修改返回值为void以及修改描述内容。

@DavidLin1577
Copy link
Contributor

建议把它同步到最新arm文档描述,包括注释。
@DavidLin1577 你好这句话我没懂什么意思,请详细说一下,arm的文档我怎么会有编辑权限

@mysterywolf 你好,是指修改rtthread的函数,不是修改arm的文档

@mysterywolf
Copy link
Member Author

建议把它同步到最新arm文档描述,包括注释。
@DavidLin1577 你好这句话我没懂什么意思,请详细说一下,arm的文档我怎么会有编辑权限

@mysterywolf
你好,建议是函数类型进行变更,包括.h和.c
int _sys_tmpnam(char *name, int fileno, unsigned maxlength) -> void_sys_tmpnam(char *name, int fileno, unsigned maxlength)
函数内部去掉return 1;
注释部分也修改返回值为void以及修改描述内容。

这个不可以,函数是keil内部的文件.h也是keil内部的 都是只读文件,我动了也没有用,只会影响到我自己的keil软件的默认.h。别人下载来还是原封不动的int。

@DavidLin1577
Copy link
Contributor

建议把它同步到最新arm文档描述,包括注释。
@DavidLin1577 你好这句话我没懂什么意思,请详细说一下,arm的文档我怎么会有编辑权限

@mysterywolf
你好,建议是函数类型进行变更,包括.h和.c
int _sys_tmpnam(char *name, int fileno, unsigned maxlength) -> void_sys_tmpnam(char *name, int fileno, unsigned maxlength)
函数内部去掉return 1;
注释部分也修改返回值为void以及修改描述内容。

这个不可以,函数是keil内部的文件.h也是keil内部的 都是只读文件,我动了也没有用,只会影响到我自己的keil软件的默认.h。别人下载来还是原封不动的int。

@明白了,因为最新的keil文档已经更新为void类型了,的确是大家keil版本不一致,然后使用arm编译器版本也不一致,这个除非增加编译版本限制宏,否则很难统一
https://www.keil.com/support/man/docs/armlib/armlib_chr1359122861135.htm

@mysterywolf
Copy link
Member Author

@DavidLin1577 所以只需要保持这个写法就可以了,按照.h给出的规定即可,无需更改的

@DavidLin1577
Copy link
Contributor

@DavidLin1577 所以只需要保持这个写法就可以了,按照.h给出的规定即可,无需更改的

@mysterywolf OK

@mysterywolf
Copy link
Member Author

@DavidLin1577 所以只需要保持这个写法就可以了,按照.h给出的规定即可,无需更改的

@mysterywolf OK

我高度怀疑是手册写错了,因为我找了以下ARMCLANG的头文件,定义的也是int不是void

@DavidLin1577
Copy link
Contributor

DavidLin1577 commented Feb 15, 2021

建议把它同步到最新arm文档描述,包括注释。
@DavidLin1577 你好这句话我没懂什么意思,请详细说一下,arm的文档我怎么会有编辑权限

@mysterywolf
你好,建议是函数类型进行变更,包括.h和.c
int _sys_tmpnam(char *name, int fileno, unsigned maxlength) -> void_sys_tmpnam(char *name, int fileno, unsigned maxlength)
函数内部去掉return 1;
注释部分也修改返回值为void以及修改描述内容。

这个不可以,函数是keil内部的文件.h也是keil内部的 都是只读文件,我动了也没有用,只会影响到我自己的keil软件的默认.h。别人下载来还是原封不动的int。

@明白了,因为最新的keil文档已经更新为void类型了,的确是大家keil版本不一致,然后使用arm编译器版本也不一致,这个除非增加编译版本限制宏,否则很难统一
https://www.keil.com/support/man/docs/armlib/armlib_chr1359122861135.htm

@DavidLin1577 所以只需要保持这个写法就可以了,按照.h给出的规定即可,无需更改的

@mysterywolf OK

我高度怀疑是手册写错了,因为我找了以下ARMCLANG的头文件,定义的也是int不是void

@mysterywolf
例如在keil软件路径\ARM\ARMCC\include查看rt_sys.h
查看到编译器定义的版本,可能还是版本问题,因为最新arm文档已经是6.6版本了,个人keil软件还没有更新
#define __ARMCLIB_VERSION 5060037

@DavidLin1577
Copy link
Contributor

@mysterywolf
Copy link
Member Author

建议把它同步到最新arm文档描述,包括注释。
@DavidLin1577 你好这句话我没懂什么意思,请详细说一下,arm的文档我怎么会有编辑权限

@mysterywolf
你好,建议是函数类型进行变更,包括.h和.c
int _sys_tmpnam(char *name, int fileno, unsigned maxlength) -> void_sys_tmpnam(char *name, int fileno, unsigned maxlength)
函数内部去掉return 1;
注释部分也修改返回值为void以及修改描述内容。

这个不可以,函数是keil内部的文件.h也是keil内部的 都是只读文件,我动了也没有用,只会影响到我自己的keil软件的默认.h。别人下载来还是原封不动的int。

@明白了,因为最新的keil文档已经更新为void类型了,的确是大家keil版本不一致,然后使用arm编译器版本也不一致,这个除非增加编译版本限制宏,否则很难统一
https://www.keil.com/support/man/docs/armlib/armlib_chr1359122861135.htm

@DavidLin1577 所以只需要保持这个写法就可以了,按照.h给出的规定即可,无需更改的

@mysterywolf OK

我高度怀疑是手册写错了,因为我找了以下ARMCLANG的头文件,定义的也是int不是void

@mysterywolf
例如在keil软件路径\ARM\ARMCC\include查看rt_sys.h
查看到编译器定义的版本,可能还是版本问题,因为最新arm文档已经是6.6版本了,个人keil软件还没有更新
#define __ARMCLIB_VERSION 5060037

我的手册是2015年的 软件是2020年的 这个应该就是手册写错了。2014年的手册就一直写的是void

@DavidLin1577
Copy link
Contributor

建议把它同步到最新arm文档描述,包括注释。
@DavidLin1577 你好这句话我没懂什么意思,请详细说一下,arm的文档我怎么会有编辑权限

@mysterywolf
你好,建议是函数类型进行变更,包括.h和.c
int _sys_tmpnam(char *name, int fileno, unsigned maxlength) -> void_sys_tmpnam(char *name, int fileno, unsigned maxlength)
函数内部去掉return 1;
注释部分也修改返回值为void以及修改描述内容。

这个不可以,函数是keil内部的文件.h也是keil内部的 都是只读文件,我动了也没有用,只会影响到我自己的keil软件的默认.h。别人下载来还是原封不动的int。

@明白了,因为最新的keil文档已经更新为void类型了,的确是大家keil版本不一致,然后使用arm编译器版本也不一致,这个除非增加编译版本限制宏,否则很难统一
https://www.keil.com/support/man/docs/armlib/armlib_chr1359122861135.htm

@DavidLin1577 所以只需要保持这个写法就可以了,按照.h给出的规定即可,无需更改的

@mysterywolf OK

我高度怀疑是手册写错了,因为我找了以下ARMCLANG的头文件,定义的也是int不是void

@mysterywolf
例如在keil软件路径\ARM\ARMCC\include查看rt_sys.h
查看到编译器定义的版本,可能还是版本问题,因为最新arm文档已经是6.6版本了,个人keil软件还没有更新
#define __ARMCLIB_VERSION 5060037

我的手册是2015年的 软件是2020年的 这个应该就是手册写错了。2014年的手册就一直写的是void

@mysterywolf 6.6版本更新时间是2020年
26 August 2020 Non-Confidential Arm Compiler v6.6.4 Release
函数返回值也是void

@mysterywolf
Copy link
Member Author

所以这个东西应该是手册的错误就一直没改过来导致的,应该以.h的注释为准

@DavidLin1577
Copy link
Contributor

@mysterywolf 在keil的arm工具链中

#define __ARMCLIB_VERSION 6120001

版本6的函数还是int型,的确是让人费解,代码和文档始终未一致。

/*
 * Return the name for temporary file number sig in the buffer
 * name. Returns 0 on failure. maxlen is the maximum name length
 * allowed.
 */
extern int _sys_tmpnam(char * /*name*/, int /*sig*/, unsigned /*maxlen*/);

@DavidLin1577
Copy link
Contributor

所以这个东西应该是手册的错误就一直没改过来导致的,应该以.h的注释为准

@mysterywolf 赞同,经过对比讨论,文档出错概率更大。

@mysterywolf
Copy link
Member Author

麻烦approve一下

@DavidLin1577
Copy link
Contributor

麻烦approve一下

@mysterywolf approved

@BernardXiong BernardXiong merged commit 06f47da into RT-Thread:master Feb 15, 2021
@mysterywolf mysterywolf deleted the exit branch February 16, 2021 12:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants