【问题标题】:Error: Disallowed system call: SYS_socketcall in C错误:不允许的系统调用:C 中的 SYS_socketcall
【发布时间】:2013-06-15 08:39:14
【问题描述】:

我有一个在 UART 上接收 8 字节数据的函数,我正在使用其中一个数据字节,我读取该数据字节并调用一个函数来调制我将要使用的 MP3 编解码器的音量利用。 设置音量的 MP3 编解码器功能有点奇怪,它将声音设置为好像输入为 0x00,音量为 100%,如果恰好是 0x64,则为 0%。

现在,LabVIEW 固件设置(由团队中的其他开发人员)以这样的方式设置,如果它想将音量设置为 100%,那么它会通过 UART 发送 0x64 和 0% 的 0x00 到如上所述,我要读取的数据字节。

为了避免这篇文章的复杂性,我尝试做的是实现一个简单的 C 代码,该代码将从控制台获取输入并打印处理后的输出。假设输入是 0x00,那么输出应该是 0x64,如果输入恰好是 0x64,那么输出应该是 0x00。 以下是我编写的代码,其中我收到错误消息:

Disallowed system call: SYS_socketcall

下面的代码可能看起来非常低效且非常基础,但这是为了便于理解。

int main(void)
{
   int input = 0x00, output = 0x00, i = 0x00, j = 0x64, var = 0x00;
   int in_arr[100], out_arr[100];

   for(i = 0x00; i < 0x65; i++, j--)
   { 
     out_arr[i] = j;
     in_arr[i] = i;
   }

   printf("Input : ");
   scanf("%x",&input);

   for(var = 0x00; var < 0x64; var++)
   {
     if(input == in_arr[var])
     {
       output = out_arr[var];
       printf("0x%x",output);
       break;
     }
   }
   return 0;
}

【问题讨论】:

    标签: c compiler-errors


    【解决方案1】:
    for(i = 0x00; i < 0x65; i++, j--)   // Should be i < 0x64
    

    这里 i0x65 =&gt; 101 以来最多可以有 101 个元素(0 到 100),但声明为仅包含 100 元素。

    将其设为i &lt; 0x64,它应该可以工作。

    为了避免这种混淆,最好将宏设置为#define MAX_ELE 100,并在0x64的所有位置使用MAX_ELE

    【讨论】:

    • 还有其他方法可以实现吗?
    • @WedaPashi,更新了答案以回答您的问题
    猜你喜欢
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 2012-09-08
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    相关资源
    最近更新 更多