vxworks vxmemprobe源码
时间: 2023-11-09 11:08:45 浏览: 110
VxWorks 操作系统中的 vxMemProbe() 函数的源代码如下:
```c
/*******************************************************************************
*
* vxMemProbe - probe for read, write, or data access permissions
*
* This routine checks the accessibility of a specified address for read,
* write, or data access. It can be used to determine whether an address
* is a valid data address or to determine whether a previous error was
* caused by an invalid address or by another type of access violation.
*
* RETURNS: OK if the address is readable or writable, or S_busError if the
* address is not accessible.
*
* ERRNO:
* S_busError
*
* SEE ALSO: memProbe(), taskMmuStateSet()
*/
STATUS vxMemProbe
(
char *adrs, /* address to be probed */
int mode, /* VX_READ, VX_WRITE, or VX_DATA_ACCESS */
int size /* 1, 2, or 4 bytes */
)
{
STATUS result = OK;
if ((mode != VX_READ) && (mode != VX_WRITE) && (mode != VX_DATA_ACCESS))
{
errnoSet (S_busError);
return (S_busError);
}
if ((size != 1) && (size != 2) && (size != 4))
{
errnoSet (S_busError);
return (S_busError);
}
switch (mode)
{
case VX_READ:
if (vxTas ((char *)adrs) == ERROR)
result = S_busError;
break;
case VX_WRITE:
if ((vxTas ((char *)adrs) == ERROR) ||
(vxTas ((char *)adrs) == ERROR))
result = S_busError;
break;
case VX_DATA_ACCESS:
if ((vxTas ((char *)adrs) == ERROR) ||
(vxTas ((char *)&((char *) adrs) [size - 1]) == ERROR))
result = S_busError;
break;
default:
break;
}
return (result);
}
```
该函数的作用是检查指定地址的读、写或数据访问权限是否可用,以判断地址是否有效或之前的错误是由无效地址还是其他类型的访问冲突引起的。如果地址可读或可写,则函数返回 OK;如果地址不可访问,则函数返回 S_busError。
函数的参数说明如下:
- adrs:待检查的地址;
- mode:访问模式,可以是 VX_READ、VX_WRITE 或 VX_DATA_ACCESS;
- size:访问数据的大小,可以是 1、2 或 4 字节。
函数首先检查传入的参数是否合法,如果不合法则返回 S_busError。然后根据传入的访问模式和数据大小,调用 vxTas() 函数对指定地址进行访问。如果访问成功,则返回 OK,否则返回 S_busError。
需要注意的是,vxTas() 函数也是 VxWorks 操作系统中的一个内部函数,其作用是对指定地址进行测试并设置。因此,vxMemProbe() 函数实际上是通过对指定地址进行测试来判断其是否可读、可写或可访问。
阅读全文