首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Snap巨龙飞行DSP上打开的文件,返回可疑的大数字

在Snap巨龙飞行DSP上打开的文件,返回可疑的大数字
EN

Stack Overflow用户
提问于 2016-12-31 05:21:36
回答 1查看 137关注 0票数 0

为什么,当调用open("/dev/tty-2",O_RDWR);时,打开的文件号是268435355 (例如-1+2^28)?这是一个在实时操作系统(比如android端)上从open()调用输出的正常大小的数字吗?好像太大了。

DSP处理器运行高通实时操作系统.其他运行Linaro的处理器。

mini-dm,DSP (数字信号处理器)运行时调试器的相关输出:

代码语言:javascript
复制
Running mini-dm version: 3.0
Device found with Product ID 0x9025. Continuing...
mini-dm is waiting for a DMSS connection...
DMSS is connected. Running mini-dm...
[08500/03]  00:40.640  HAP:63:HAP_debug_v2 weak ref not found, return _rtld_sym_zero@_rtld_objmain  0294  symbol.c
[08500/03]  00:40.640  HAP:63:HAP_debug_v2 weak ref not found, return _rtld_sym_zero@_rtld_objmain  0294  symbol.c
[08500/02]  00:40.640  HAP:63:Opening serial port  0062  helloworld_dsp.c
[08500/00]  00:40.640  configuring UART for 4-wire mode, DAL id: 0x2001005  0852  DalUart.c
[08500/02]  00:40.641  HAP:63:Opened serial port number 268435455  0065  helloworld_dsp.c
[08500/02]  00:40.641  HAP:63:Closing serial port  0075  helloworld_dsp.c
[08500/02]  00:40.641  HAP:63:Successfully closed serial port number 268435455  0078  helloworld_dsp.c
[08500/02]  00:40.641  HAP:63:Opening serial port  0062  helloworld_dsp.c
[08500/02]  00:40.642  HAP:63:workaround: reopening an existing serial port  0351  serial.c
[08500/02]  00:40.642  HAP:63:Opened serial port number 268435455  0065  helloworld_dsp.c
[08500/02]  00:40.642  HAP:63:Beginning serial read  0123  helloworld_dsp.c
[08500/02]  00:40.642  HAP:63:/dev/tty-2 read bytes [0]:   0129  helloworld_dsp.c
[08500/02]  00:40.642  HAP:63:Closing serial port  0075  helloworld_dsp.c
[08500/02]  00:40.642  HAP:63:Successfully closed serial port number 268435455  0078  helloworld_dsp.c

相关DSP代码:

代码语言:javascript
复制
int example_interface_serial_open()
{
LOG_INFO("Opening serial port");
  serial_fds[0] = open(serial_path[0],O_RDWR);
  if (serial_fds[0] >= SUCCESS) {
    LOG_INFO("Opened serial port number %d", serial_fds[0]);
  } else {
  //FIXME log error!
LOG_INFO("Error opening serial port");
    serial_fds[0] = ERROR;
  }
  return serial_fds[0];
}

int example_interface_serial_close(int fd) {
LOG_INFO("Closing serial port");

  if (!close(fd)) {
    LOG_INFO("Successfully closed serial port number %d", fd);
  } else {
    LOG_INFO("Error closing serial port");
    fd = ERROR;
  }

  return fd;
}

int example_interface_serial_read(int fd) {
  int res = SUCCESS;
  char rx_buffer[SERIAL_SIZE_OF_DATA_BUFFER];
  unsigned int num_bytes_read;
  int active_devices = 0;
  int runs, i;

  LOG_INFO("Beginning serial read");

  memset(rx_buffer, 0, SERIAL_SIZE_OF_DATA_BUFFER);
  num_bytes_read = read(fd, rx_buffer,
      SERIAL_SIZE_OF_DATA_BUFFER);
  LOG_INFO("%s read bytes [%d]: %s",
      serial_path[0], num_bytes_read, rx_buffer);

  if (res < SUCCESS) {
    LOG_INFO("Closing file %s",
      serial_path[0]);
    close(fd);
    fd = ERROR;
  }

return fd;
}

编辑:包括LOG_INFO()的定义

代码语言:javascript
复制
/****************************************************************************
 * Copyright (C) 2015 Mark Charlebois. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 * 3. Neither the name ATLFlight nor the names of its contributors may be
 *    used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 ****************************************************************************/
#pragma once

#ifdef __cplusplus
extern "C" {
#endif

#ifdef __hexagon__
// Debug output on the aDSP
#include <HAP_farf.h>

#define LOG_INFO(...) FARF(ALWAYS, __VA_ARGS__);
#define LOG_ERR(...) FARF(ALWAYS, __VA_ARGS__);
#define LOG_DEBUG(...) FARF(MEDIUM, __VA_ARGS__);

#else
// Debug output on the apps processor
#include <stdio.h>
#define LOG_INFO(...) do{ printf(__VA_ARGS__); printf("\n"); } while (0)
#define LOG_ERR(...) do{ printf(__VA_ARGS__); printf("\n"); } while (0)
#define LOG_DEBUG(...) do{ printf(__VA_ARGS__); printf("\n"); } while (0)

#endif

#ifdef __cplusplus
}
#endif

int i=-1; LOG_INFO("%d\n",1);输出

DSP端:[08500/02] 02:27.822 HAP:24639: -1 0063 helloworld_dsp.c

Linux端:-1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-03 00:42:38

设备的开发人员:

open()函数的返回值是一个有符号的int,成功的返回值是>= 0,失败的返回值小于零。 返回值如此大的原因是因为它被一个已知的常数0x0FFFFFFF所抵消。这样做是为了区分设备句柄和文件系统句柄(文件系统句柄总是小于0x0FFFFFF),这些句柄在aDSP代码中处理不同。

古怪!:P

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41405722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档