小编Coc*_*nop的帖子

构造函数中冒号后的变量

我还在学习C++并试图理解它.我正在查看一些代码并看到:

point3(float X, float Y, float Z) :
x(X), y(Y), z(Z)  // <----- what is this used for
{
}
Run Code Online (Sandbox Code Playgroud)

位于构造函数参数旁边的"x(X),y(Y),z(Z)"是什么意思?

c++ constructor ctor-initializer

22
推荐指数
2
解决办法
8173
查看次数

Linux中断与轮询

我正在开发一个带有DSP和ARM的系统.在ARM上有一个Linux操作系统.我有一个DSP向ARM(Linux)发送数据 - 在Linux中有一个内核模块,它读取从DSP接收的数据.内核模块正在唤醒以使用DSP与ARM之间的硬件中断来读取数据.

我想编写一个用户空间应用程序,每次有来自DSP的新数据时,它将从内核空间(内核模块)读取数据.
问题是:

有什么方法可以做到这一点,从内核到用户空间的软件中断,或者每隔10ms从用户空间轮询(用内核读取已知的内存地址).

知道:

  • 从DSP到内核的数据必须在很短的时间内到达 - 100us.
  • 从内核到用户空间的数据可能需要10ms到30ms.
  • 正在读取的数据被认为很小 - 大约100个字节.

c linux real-time interrupt linux-kernel

10
推荐指数
1
解决办法
3205
查看次数

使用`strstr`在字符串中搜索多字节UTF-8字符是否安全?

按照我之前的问题:为什么`strchr`似乎与多字节字符一起工作,尽管手册免责声明?,我发现这strchr是一个糟糕的选择.

相反,我正在考虑使用strstr寻找单个字符(不是多字节char):

const char str[] = "This string contains é which is a multi-byte character";
char * pos = strstr(str, "é"); // 'é' = 0xC3A9: 2 bytes 
printf("%s\n", pos);
Run Code Online (Sandbox Code Playgroud)

输出继电器:

é是一个多字节字符

这是我所期望的:我的多字节字符的第一个字节的位置.

先验,这不是规范使用,strstr但似乎运作良好.
这种解决方法安全吗?你能想到会导致错误的任何副作用或特殊情况吗?

[编辑]:我应该确切地说我不想使用wchar_t类型,我处理的字符串是UTF-8编码的(我知道这个选择可以讨论,但这是一个无关紧要的辩论)

c string utf-8 multibyte-functions

7
推荐指数
1
解决办法
2474
查看次数

MPEG传输流连续性计数器

我正在通过10GB MPLS网络对IPTV第3层组播VPN进行故障排除.

只有某些高清频道正在经历严重的冻结和拼接; 所有其他SD和HD频道都可以正常工作.我们的IPTV视频监控设备通过监控连续性计数器来检测和报告丢包.我问过我们所有的设备供应商并阅读我能找到的每个.pdf,似乎没有人确切知道:

  1. MPEG传输流连续性计数器如何/何时/何处适合传输流?
  2. 传输流中的哪些数据包/帧正在计算?
  3. 为什么报告的数据包丢失似乎以16(0,16,32)的增量出现?
  4. 怎么会出现0丢包的错误情况?
  5. PCR值如何/何时/何处适合传输流?

mpeg stream transport

6
推荐指数
1
解决办法
1万
查看次数

为什么const限定符警告依赖于变量内容,而不是类型?

gcc用以下代码发现了一个奇怪的行为:

#include <stdio.h>
#include <string.h>

int main(void)
{
    const char str[] = "This string contains é which is a multi-byte character";
    const char search[] = "?";
    char * pos = strstr(str, search);
    printf("%s\n", pos);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译器会发出警告:

$ gcc toto.c -std=c99
toto.c: In function ‘main’:
toto.c:8:18: warning: initialization discards ‘const’ qualifier
from pointer target type [enabled by default]
Run Code Online (Sandbox Code Playgroud)

但如果我改变以下内容search:

const char search[] = "é";
Run Code Online (Sandbox Code Playgroud)

同样的编译没有任何警告:为什么?

注意:如果我交换?,我有完全相同的行为é:如果字符in search不存在str,我会收到警告.

c string gcc

6
推荐指数
2
解决办法
1760
查看次数

ffmpeg 实时转码更快的替代方案?

是否有任何开源替代品ffmpeg,并VLC以实时视频转码,从HTTP数据流将RTMP或其他?

ffmpeg 导致我的 CPU(AMD 4.0GHZ 8Core)100% 加载,只有 8 个 SD 流。

感谢帮助。

附注。我想我不需要转码我的视频,我也可以使用 http 视频代理之类的东西进行流式传输。源是 HTTP 流格式,我也在 Linux 下。

linux streaming ffmpeg dvb

5
推荐指数
1
解决办法
6661
查看次数

如何解析h.264中的访问单元

我正在一个项目中工作,需要Access unitsH.264原始基本流中删除一些,例如删除4个访问单元并播放剩余的视频.

为此,我将Access unit Delimiter(NAL Unit Type:9)作为边界Access Unit并切断视频,但视频以丢包结束.但是如果我把Sequence parameter set(NAL Unit type :7)作为边界,结果视频播放没有任何丢包.
有人请帮我解决这个问题:我应该在哪里剪切视频?

ffmpeg h.264 mpeg2-ts

5
推荐指数
2
解决办法
7551
查看次数

如何暂时禁用GCC警告"Wstack-usage"?

我正在尝试编译导入此BiTStream 文件的项目.

GCC输出以下错误:

警告:堆栈使用可能无限制[-Wstack-usage =]

实际上,在编译命令行(通过CMake生成)中,我有:

-Wstack使用率= 2048

我想对项目的其余部分保留此警告,但为此特定文件禁用它.

我检查了GCC警告选项GCC诊断编译指示并尝试:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wswitch-enum"
#pragma GCC diagnostic ignored "-Wformat"
#pragma GCC diagnostic ignored "-Wswitch-default"
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wstack-usage"

#include <bitstream/mpeg/psi/descs_print.h>

#pragma GCC diagnostic pop
Run Code Online (Sandbox Code Playgroud)

但海湾合作委员会仍然抱怨:

警告:'#pragma GCC诊断'之后的未知选项[-Wpragmas]

#pragma GCC诊断警告"-Wstack-usage"

请注意,其他警告已正确禁用.

是否有特定的synatx Wstack-usage

c pragma gcc-warning

5
推荐指数
1
解决办法
1202
查看次数

为什么`strchr`似乎与多字节字符一起工作,尽管手册免责声明?

从:

man strchr
Run Code Online (Sandbox Code Playgroud)

char*strchr(const char*s,int c);

strchr()函数返回指向字符串s中第一次出现的字符c的指针.

这里"字符"表示"字节"; 这些函数不适用于宽字符或多字节字符.

如果我尝试搜索多字节字符é(0xC3A9在UTF-8中):

const char str[] = "This string contains é which is a multi-byte character";
char * pos = strchr(str, (int)'é');
printf("%s\n", pos);
printf("0x%X 0x%X\n", pos[-1], pos[0]); 
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

这是一个多字节字符

0xFFFFFFC3 0xFFFFFFA9

尽管有警告:

警告:多字符字符常量[-Wmultichar]

所以这是我的问题:

  • 这意味着什么不适strchr用于多字节字符?(它似乎工作,只要int类型足够大,包含你的多字节,最多4个字节)
  • 如何摆脱警告,即如何安全地恢复多字节值并将其存储在int中?
  • 为什么是前缀0xFFFFFF

c string wchar-t utf-8

4
推荐指数
1
解决办法
622
查看次数

如何将掩码应用于const void*地址?

我在嵌入式目标上工作,并希望定义内存池.

内存地址表示为void*.但是在特定情况下,这些地址被缓存,我想要解除它们以直接获得"真实"硬件地址.

我想定义开头的地址memory_area(这只是一个标记):

#define UNCACHE_MASK 0xABCDEF12UL // Value of the mask to apply
extern uint32_t memory_area; // Global, defined somewhere else
const void * virtual_address = &memory_area; // OK
const void * real_address = 
    (void*)(virtual_address | UNCACHE_MASK); // guilty line
Run Code Online (Sandbox Code Playgroud)

不幸的是,GCC不会让我这样做:

error: invalid operands to binary | (have 'const void *' and 'long unsigned int')
Run Code Online (Sandbox Code Playgroud)

无奈之下我试过:

const void * real_address = 
    (void*)(((uint32_t)virtual_address) | UNCACHE_MASK); // guilty line
Run Code Online (Sandbox Code Playgroud)

徒然:

error: initializer element is not constant …
Run Code Online (Sandbox Code Playgroud)

c casting memory-address

4
推荐指数
1
解决办法
694
查看次数