嵌入式技术论坛
直播中

贾桂林

7年用户 1508经验值
私信 关注
[问答]

为什么rt_pin_get的异常返回值是-RT_ENOSYS?

RT-Thread的error code定义有0~10,一共11种,为什么rt_pin_get异常时返回值是-RT_ENOSYS而不是RT_ENOSYS,这个-是为什么?

/* RT-Thread error code definitions */
#define RT_EOK 0 /< There is no error */
#define RT_ERROR 1 /
< A generic error happens */
#define RT_ETIMEOUT 2 /< Timed out */
#define RT_EFULL 3 /
< The resource is full */
#define RT_EEMPTY 4 /< The resource is empty */
#define RT_ENOMEM 5 /
< No memory */
#define RT_ENOSYS 6 /< No system */
#define RT_EBUSY 7 /
< Busy */
#define RT_EIO 8 /< IO error */
#define RT_EINTR 9 /
< Interrupted system call */
#define RT_EINVAL 10 /**< Invalid argument */
rt_base_t rt_pin_get(const char *name)
{
RT_ASSERT(_hw_pin.ops != RT_NULL);
if (name[0] != 'P' && name[0] != 'p')
{
return -RT_EINVAL;
}
if (_hw_pin.ops->pin_get == RT_NULL)
{
return -RT_ENOSYS;
}
return _hw_pin.ops->pin_get(name);
}

回帖(2)

马祥

2023-2-23 14:16:00
这里是有原因的,借鉴了Linux内核的设计思路,Linux内核中的函数通常以返回指针的形式来传递调用函数后执行的结果,返回值指针有三种结果:
(1)调用成功则返回一个有效指针(>0)
(2)调用失败返回NULL(就是0),例如malloc、kmalloc、vmalloc
(3)调用失败返回错误信息指针(无效指针)
因为0和正整数都是有用的,我们就是通过这个错误指针(负数)来传递有关错误的信息,所以就出现了-RT_ENOSYS这种情况。
举报

刘埃生

2023-2-23 14:16:11
这个是一种约定吧,错误码是正值,返回错误码时加上负号变成负值。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分