小编Jef*_*ffV的帖子

为什么有一个特殊的new和删除数组?

使用delete而不是delete[]?有什么问题?

在分配和释放数组的过程中是否有一些特殊的事情发生?

为什么它会malloc与免费不同?

c c++ arrays memory-management new-operator

11
推荐指数
4
解决办法
2048
查看次数

如何链接GCC中不以lib开头的库文件?

当我将libm等库与ld链接时,我需要删除lib前缀.如果文件不遵循此命名约定怎么办?除了重命名文件之外,有没有办法链接它?

linker gnu-toolchain

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

如何确定PCI/PCIe BAR尺寸?

我知道PCI配置空间中的基地址寄存器(BAR)定义了PCI地址的起始位置,但该区域的大小是如何建立的?

当然这是硬件的属性,因为它只知道它可以处理的地址空间有多远.但是,我似乎无法在PCI配置结构中看到BAR大小字段.

pci pci-e

9
推荐指数
2
解决办法
2万
查看次数

翻滚安全计时器(勾选)比较

我有一个硬件计数器,我可以观察时间考虑因素.它计算毫秒数并存储在16位无符号值中.如何安全地检查计时器值是否已经过一定时间并安全地处理不可避免的翻转:

//this is a bit contrived, but it illustrates what I'm trying to do
const uint16_t print_interval = 5000; // milliseconds
static uint16_t last_print_time;   

if(ms_timer() - last_print_time > print_interval)
{
    printf("Fault!\n");
    last_print_time = ms_timer();
}
Run Code Online (Sandbox Code Playgroud)

当ms_timer溢出为0时,此代码将失败.

c c++ embedded rollover timer

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

混合RTOS和循环执行程序是否有意义?

在一个小型嵌入式系统项目中,我们有一些代码,我们希望在一个线程中运行,因此我们选择在嵌入式RTOS(eCos)之上构建.

以前,我们在main()中使用了一个循环执行程序,它驱动每个作为状态机实现的任务.对于某些任务,我们遇到了需要将任务分解为许多细粒度状态的问题,从而使代码更加复杂.

当切换到RTOS时,如果我们给每个单独的任务提供自己的线程,我们发现每个线程堆栈的内存使用量会很快增加.(我们只有64k,需要内存用于我们的通信缓冲区)

我们正在考虑使用轮胎进行通信任务,并考虑使用其他线程进行循环执行.循环执行程序将驱动其他逻辑任务.

这样混合RTOS和循环执行是否有意义?

embedded multithreading rtos

8
推荐指数
1
解决办法
840
查看次数

如何在struct中正确定义一个函数指针,它将struct作为指针?

我有一个带回调函数的结构,回调函数需要一个指向结构的指针才能进行操作.如何正确定义这些元素,以便在没有警告的情况下进行编译?

typedef struct {

    // some fields required for processing...

    int (*doAction)(struct pr_PendingResponseItem *pr);
} pr_PendingResponseItem;
Run Code Online (Sandbox Code Playgroud)

如果我删除pr参数上的"struct"属性,我会收到错误.如果我留下它,我会收到一个警告:"它的范围只是这个定义或声明,这可能不是你想要的"

这一切都有效,但我想知道定义这种结构的正确方法.

另外相关的是定义自引用结构:

typedef struct LinkedItem_ {
    LinkedItem_ * prev;
    LinkedItem_ * next;
    void * data;
} LinkedItem;
Run Code Online (Sandbox Code Playgroud)

(我认为这是正确的,但如果与问题相关,则欢迎其他想法.)

c struct function-pointers

8
推荐指数
2
解决办法
6063
查看次数

Eclipse插件开发入门的最佳资源是什么?

我有兴趣编写eclipse插件,从哪里开始?

有哪些资源帮助了你?

我正在寻找:
1.教程
2.致力于插件开发的网站
3.书籍

eclipse eclipse-plugin

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

如何在C程序中编译Perl代码?

我有一个带有嵌入式Perl解释器的C程序.我希望能够从程序中预编译一些Perl代码.我怎么做?

基本原理(如果有人感兴趣)是能够编译一次,存储解析树,并执行多次(只要编译的代码不会改变).

谢谢!马杜

PS:我使用的是Perl-5.8,但要知道Perl-6.0是否能以任何方式使这更容易.

c perl embedded-language

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

如何最好地处理分层协议栈中的大缓冲区?

我正在为一个小型嵌入式系统(多点,rs485类型的东西)开发一个简单的协议栈.在这个堆栈中,在OSI层之后丢失模型:

  1. 应用
  2. 网络
  3. 数据链接
  4. 物理(串行驱动程序)

每个图层都有自己的页眉/页脚部分,用于包裹图层上方的有效负载.

我将使用自己的静态缓冲池静态分配固定大小的块来存储二进制数据包.(此应用程序中没有malloc /免费.)

在其他API中,我已经看到数据通常作为具有相关长度的const指针传递.以这种方式,数据将需要在每层的复制操作,因为上面层的有效载荷被放置在当前层的新分配的缓冲区中.

对于三层堆栈,这将是2个复制操作和3个分配的缓冲区.

有没有更好的方法来做到这一点,仍然保持协议层的清晰分离?

为了更好地锚定讨论,我们可以说数据包通常大约为2k,处理器是8Mhz的小型8位微处理器.

c api embedded buffer

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

在C++中,如何制作一个可以包含相同变体的矢量的变体?

我试图创建一个std :: variant,它可以包含相同变量的向量:

class ScriptParameter;
using ScriptParameter = std::variant<bool, int, double, std::string, std::vector<ScriptParameter> >;
Run Code Online (Sandbox Code Playgroud)

我正在重新定义ScriptParameter.它认为可能是因为模板参数无法向前声明?

有没有办法实现一个也可以包含相同类型变体数组的变体?

c++ vector self-reference c++17 std-variant

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