小编Ami*_*ekh的帖子

手动分配地址时,编译器优化了指向函数的指针

我需要在地址 0xDD2 处调用一个函数:

// foo.h
void foo(void) __at(0xDD2);

// foo.c
#include "foo.h"
void foo(void)
{
    // some code
}
Run Code Online (Sandbox Code Playgroud)

此代码有效:

#include "foo.h"
void main(void)
{
    void (*a)(void) = &foo;
    a();
}
Run Code Online (Sandbox Code Playgroud)

然而,这个没有:

#include "foo.h"
void main(void)
{
    void (*a)(void) = (void (*)(void))(0x0DD2);
    a();
}
Run Code Online (Sandbox Code Playgroud)

编译器 (XC8) 说:main.c:5:: warning: (759) expression generates no code调试器在调试时传递这些行。

我需要第二个(仅通过其地址调用函数)。为什么编译器会优化它?指针赋值有没有错误?更改编译器的优化级别没有帮助。

c pointers function pic xc8

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

访问随机图像像素和最多一次的快速方法

我正在学习 OpenCV (C++),作为一个简单的实践,我设计了一个简单的效果,使一些图像像素变黑或变白。我希望每个像素最多编辑一次;所以我将所有像素的地址添加到向量中。但这让我的代码变得很慢;专门用于大图像或大量效果。这是我的代码:

void effect1(Mat& img, float amount)    // 100 ? amount ? 0
{
    vector<uchar*> addresses;
    int channels = img.channels();
    uchar* lastAddress = img.ptr<uchar>(0) + img.total() * channels;
    for (uchar* i = img.ptr<uchar>(0); i < lastAddress; i += channels) addresses.push_back(i);   //Fast Enough
    size_t count = img.total() * amount / 100 / 2;
    for (size_t i = 0; i < count; i++)
    {
        size_t addressIndex = xor128() % addresses.size();   //Fast Enough, xor128() is a fast random number generator
        for (size_t …
Run Code Online (Sandbox Code Playgroud)

c++ random opencv image-processing

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

标签 统计

c ×1

c++ ×1

function ×1

image-processing ×1

opencv ×1

pic ×1

pointers ×1

random ×1

xc8 ×1