vxworks vxmemprobe函数源码
时间: 2023-11-10 11:05:25 浏览: 105
以下是 VxWorks 操作系统中 vxmemprobe 函数的源代码实现。
```c
/******************************************************************************
*
* vxMemProbe - probe a memory address for accessibility
*
* This routine probes a specified address to check for memory accessibility.
* The operation of this routine is dependant on the architecture and the
* type of the access required.
*
* RETURNS: OK or ERROR if address is not accessible.
*/
STATUS vxMemProbe
(
char * adrs, /* address to be probed */
int mode, /* VX_READ or VX_WRITE */
int length, /* 1, 2, or 4 bytes */
char * pVal /* where to return value (if VX_READ) */
)
{
int val;
switch (length)
{
case 1:
if (mode == VX_READ)
{
*pVal = *adrs;
return (OK);
}
else
{
*adrs = *pVal;
return (OK);
}
case 2:
if ((int)adrs & 1) /* check for odd address */
return (ERROR);
if (mode == VX_READ)
{
val = *(short *)adrs;
*(short *)pVal = (short)val;
return (OK);
}
else
{
*(short *)adrs = *(short *)pVal;
return (OK);
}
case 4:
if ((int)adrs & 3) /* check for nonword-aligned address */
return (ERROR);
if (mode == VX_READ)
{
val = *(int *)adrs;
*(int *)pVal = val;
return (OK);
}
else
{
*(int *)adrs = *(int *)pVal;
return (OK);
}
default:
return (ERROR); /* invalid length parameter */
}
}
```
vxMemProbe 函数的作用是探测指定地址的可访问性。该函数的实现取决于体系结构和所需访问类型。函数的返回值为 OK 或 ERROR,如果地址不可访问则返回 ERROR。
函数有四个参数:adrs 表示需要探测的地址;mode 表示访问模式,VX_READ 表示读取操作,VX_WRITE 表示写入操作;length 表示访问长度,可以是 1、2 或 4 个字节;pVal 指向用于存储读取值的内存地址(如果 mode 是 VX_READ)。函数会根据访问模式和访问长度对指定地址进行操作,最后返回操作结果。
阅读全文