小编Joh*_*n S的帖子

ARM程序集:存储上的自动增量寄存器

是否可以使用?自动递增STR上寄存器的基址[Rn]!.我已经浏览了文档,但未能找到明确的答案,主要是因为LDR和STR都提供了命令语法 - 理论上它应该适用于两者,但我找不到任何自动的例子 - 在商店增加(装载工作正常).

我做了一个小程序,在一个向量中存储两个数字.当它完成时,内容out应该是,{1, 2}但是存储会覆盖第一个字节,就像自动增量不起作用一样.

#include <stdio.h>

int main()
{
        int out[]={0, 0};
        asm volatile (
        "mov    r0, #1          \n\t"
        "str    r0, [%0]!       \n\t"
        "add    r0, r0, #1      \n\t"
        "str    r0, [%0]        \n\t"
        :: "r"(out)
        : "r0" );
        printf("%d %d\n", out[0], out[1]);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:虽然答案适合常规加载和存储,但我发现优化器会在向量指令(例如vldm/vstm)上自动增加.例如,以下程序

#include <stdio.h>

int main()
{
        volatile int *in = new int[16];
        volatile int *out = new int[16];

        for (int i=0;i<16;i++) in[i] = i;

        asm volatile ( …
Run Code Online (Sandbox Code Playgroud)

assembly arm

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

来自内存缓冲区的DirectFB数据

我需要一种非常快速的方式来显示屏幕上的数据缓冲区.我首先尝试访问linux framebuffer,事实证明这是非常好的.然后我了解了directFB,我喜欢它提供的额外功能(如快速memcpy,动态调整图像大小,不需要额外的代码等).但后来我遇到了麻烦 - 所有的例子都是从文件中加载的图像.据我所知,它的'DataBuffer'类型没有示例/教程.在查看了文档和源代码之后,我设法编译了这样的东西:

DFBSurfaceDescription sdsc;
DFBDataBufferDescription ddsc;
DFBDataBufferDescriptionFlags ddscf = (DFBDataBufferDescriptionFlags)DBDESC_MEMORY;
IDirectFBDataBuffer *dbuffer;
IDirectFBImageProvider *provider;

ddsc.flags = ddscf;
ddsc.file = NULL;
ddsc.memory.data = m_z;
ddsc.memory.length = 640*480;

DFBCHECK (DirectFBInit (&argc, &argv));
DFBCHECK (DirectFBCreate (&dfb));
DFBCHECK (dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN));
sdsc.flags = DSDESC_CAPS;
sdsc.caps  = (DFBSurfaceCapabilities)(DSCAPS_PRIMARY | DSCAPS_FLIPPING);
DFBCHECK (dfb->CreateSurface( dfb, &sdsc, &primary ));
DFBCHECK (primary->GetSize (primary, &screen_width, &screen_height));

DFBCHECK (dfb->CreateDataBuffer(dfb, &ddsc, &dbuffer));
DFBCHECK (dbuffer->CreateImageProvider(dbuffer, &provider));
DFBCHECK (provider->GetSurfaceDescription (provider, &sdsc));

DFBCHECK (dfb->CreateSurface( dfb, &sdsc, &fbwindow ));
DFBCHECK (provider->RenderTo (provider, fbwindow, NULL)); …
Run Code Online (Sandbox Code Playgroud)

framebuffer directfb

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

函数调用中的new运算符

我的问题是new在函数调用中使用运算符分配的对象会发生什么.

一个具体的例子:我有一个私有向量pV,我想发送到类之外的对象/函数,foo->func(std::vector<int> *vec).我第一次尝试写

foo->func( new std::vector<int>(pV) )
Run Code Online (Sandbox Code Playgroud)

但是这会导致内存泄漏(当在循环内重复调用所述函数时).当我专门创建一个新对象,调用该函数然后删除该对象时,整个过程起作用,没有内存泄漏.

当函数返回时,新创建的对象不应该"过期"并被删除吗?如果没有,我应该如何从被调用函数中删除对象?哪种方法更好?

c++ new-operator

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

标签 统计

arm ×1

assembly ×1

c++ ×1

directfb ×1

framebuffer ×1

new-operator ×1