小编mbs*_*kel的帖子

在编译时有效配置类层次结构

这个问题专门针对嵌入式硬实时系统上的C++架构.这意味着数据结构的大部分以及确切的程序流都是在编译时给出的,性能很重要,并且可以内联大量代码.解决方案最好只使用C++ 03,但也欢迎使用C++ 11输入.

我正在寻找建筑问题的既定设计模式和解决方案,其中相同的代码库应该被重复用于几个密切相关的产品,而某些部分(例如硬件抽象)必然是不同的.

我可能会最终得到一个封装在类中的模块的层次结构,这些模块可能看起来像这样,假设有4层:

Product A                       Product B

Toplevel_A                      Toplevel_B                  (different for A and B, but with common parts)
    Middle_generic                  Middle_generic          (same for A and B)
        Sub_generic                     Sub_generic         (same for A and B)
            Hardware_A                      Hardware_B      (different for A and B)
Run Code Online (Sandbox Code Playgroud)

这里,一些类继承自公共基类(例如,Toplevel_A来自Toplevel_base),而其他类则根本不需要专门化(例如Middle_generic).

目前我可以想到以下方法:

  • (A):如果这是一个常规的桌面应用程序,我将使用虚拟继承并在运行时创建实例,例如使用抽象工厂.

    缺点:然而,*_B类永远不会在产品A中使用,因此在运行时取消引用所有虚函数调用和未链接到地址的成员将导致相当大的开销.

  • (B)使用模板专门化作为继承机制(例如CRTP)

    template<class Derived>
    class Toplevel  { /* generic stuff ... */ };
    
    class Toplevel_A : public Toplevel<Toplevel_A> { /* specific stuff ... …
    Run Code Online (Sandbox Code Playgroud)

c++ architecture embedded inheritance real-time

11
推荐指数
2
解决办法
1093
查看次数

如何使用MATLAB在卡车中找到木材?

我的问题是使用拖车后部的图像自动查找和计算卡车中的木材.我试图使用MATLAB Image Toolbox解决这个问题.所以,这是我的代码.

function [ centers, rads, metrics ] = TimberFind( img )
    minrad = 20;
    maxrad = 110;
    Hsens = .93;
    CannySens = .20;

    img_gray = rgb2gray(img);
    PSF = fspecial('gaussian', 5, 0.5);
    img_gray = imfilter(img_gray, PSF, 'symmetric', 'conv');
    img_gray = imadjust(img_gray);
    PSF=fspecial('gaussian', 10, 1);
    Blurred = imfilter(img_gray, PSF, 'symmetric', 'conv');
    cont = imsubtract(img_gray, Blurred);
    preprocessed = imadd(img_gray, 3*cont);    

    bin = edge(preprocessed, 'canny', CannySens);

    [cen, r, m] = imfindcircles(bin, [minrad maxrad],'Sensitivity', Hsens);  
end
Run Code Online (Sandbox Code Playgroud)

但结果并不是很好.您可以看到完整的数据集或以下示例: 第一个输入图像 第一个输出图像

因此,如果我使Canny和imfindcircles算法足够灵敏地检测所有木材,那么会发现一些过量的反应.我有一个想法,就是从大图像中删除每个木材,然后构建一些获得小图片的全局标准,并尝试一些机器学习算法来解决这个问题.但我认为这种方式相当困难,所以也许有人可以提出其他建议吗?也许有更好的方法在使用Canny运算符之前对图像进行预处理?如果你有任何想法如何做到更好,请告诉我.谢谢!

matlab machine-learning image-processing

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

用于计算矩阵中每个元素的连接元素数的算法

我正在寻找方法来找到矩阵中连接(相邻)元素的数量.我给了一个2D对象数组,其中每个对象可能有一个标志集.如果设置了标志,我需要计算设置了标志的邻居的数量.对于每个邻居,重复该过程.

查看图像以查看问题: 可视化

我想这是一个相当普遍的问题.它的名字是什么,所以我可以做自己的研究?

algorithm matrix

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

从Atmel Studio 6运行单元测试

我目前正在Atmel Studio 6中开发一个嵌入式c ++项目.该项目具有相当重要的嵌入式部分,也是一个重要的业务逻辑部分.理想情况下,我想对业务逻辑代码运行一些单元测试.能够方便地构建然后运行这些测试将使单元测试更有可能被使用.

如果我尝试使用默认avr-gcc编译器使用Boost单元测试进行编译,则会出现错误,因为无法找到各种头文件.我知道这些标头并没有为我使用的AVR芯片组实现,因为它们在这种情况下会太昂贵.然而,这些标题仅用于非嵌入部分的单元测试,因此已被放置在它们自己的专用单元测试项目中.

我是否需要设置不同的编译器来编译单元测试?是否可以使用不同的编译器工具链将单元测试编译为安装的默认avr-gcc,或者我是否必须在其他地方编译单元测试?有更简单的方法吗?

c++ embedded boost-test atmel atmelstudio

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

Eclipse CDT拼写检查XML(非C++)文件

在Eclipse Oxygen with CDT中我可以为大多数文件类型配置拼写检查

Preferences > General > Editors > Text Editors > Spelling
Run Code Online (Sandbox Code Playgroud)

但是对于显然在"结构化文本编辑器"中打开的XML文件,我找不到这样的选项.

这是隐藏在某个地方还是由一个好的插件覆盖?


更新

用户指南中提到的拼写检查为"结构化文本编辑器",但是,这并不符合实际的用户界面; 既不存在"窗口>首选项>拼写检查",也没有"编辑>拼写检查":

窗口>首选项>拼写检查 编辑>拼写检查

eclipse spell-checking eclipse-cdt

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

Django-TinyMCE:如何正确配置?

我正在摆弄django-tinyMCE并注意到一些配置没有得到应用.这是我的settings.py中的代码

TINYMCE_DEFAULT_CONFIG = {
    'theme' : 'advanced',
    'theme_advanced_buttons1' : 'bold,italic,underline,separator,bullist,numlist,separator,link,unlink',
    'theme_advanced_buttons2' : '',
    'theme_advanced_buttons3' : '',
    'theme_advanced_toolbar_location' : 'top',
    'theme_advanced_toolbar_align': 'left',
    'paste_text_sticky': 'true',
    'paste_text_sticky_default' : 'true',
    'valid_styles' : 'font-weight,font-style,text-decoration',
}
Run Code Online (Sandbox Code Playgroud)

那些不起作用的是:paste_text_sticky,paste_text_sticky_default和valid_styles.

我基本上要做的是:

只允许

  • 文字是"粗体/斜体/下划线"
  • 清单(子弹,数字)
  • 链接

其他一切都是被禁止的.

你知道我做错了什么吗?非常感谢.

django tinymce django-forms

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

具有非静态信号名称的循环过程调用

在一些测试平台代码中,我使用一个过程来处理信号。然后我在不同的信号上按顺序多次使用这个程序。只要我明确定义信号,这就可以正常工作;一旦我在循环中索引信号,它就会失败

(vcom-1450) 正式“s”的实际(索引名称)不是静态信号名称。

为什么这是不可能的,我该如何解决?可能我可以将它移动到 a for ... generate,但是我想do_something以一个很好定义的顺序被调用。

library ieee;
use ieee.std_logic_1164.all;

entity test is
end test;

architecture tb of test is
    signal foo : std_logic_vector(1 downto 0);
begin
    dummy: process is
        procedure do_something (
            signal s : out std_logic
        ) is begin
            s <= '1';
            report "tic";
            wait for 1 ns;
            -- actually we would do something more interesting here
            s <= '0';
            report "toc";
        end procedure;
    begin
        -- This works well, but requires manual loop-unrolling …
Run Code Online (Sandbox Code Playgroud)

vhdl modelsim

3
推荐指数
1
解决办法
3029
查看次数

给定一个数字,快速检查它在哪个区间?

假设我有四个区间:[0,82],[82,146],[146,180],[180,255].

给出一个数字,比方说110.我想快速检查哪个区间是110英寸,返回1或2或3或4.

我想知道MATLAB是否有现有的功能,而不是手动比较数字.

谢谢.

matlab

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

OpenCV代码是否在GPU上运行?

我需要在GPU上进行图像处理以满足类要求.这个OpenCV代码是在GPU还是CPU上运行?

// The "Square Detector" program.
// It loads several images sequentially and tries to find squares in
// each image
    #include "opencv2/core/core.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/highgui/highgui.hpp"

    #include <iostream>
    #include <math.h>
    #include <string.h>

    using namespace cv;
    using namespace std;
    int thresh = 50, N = 11;
    const char* wndname = "Square Detection Demo";
    static void findSquares( const Mat& image, vector<vector<Point> >& squares )
    {
        squares.clear();

        Mat pyr, timg, gray0(image.size(), CV_8U), gray;
        pyrDown(image, pyr, Size(image.cols/2, image.rows/2));
        pyrUp(pyr, timg, image.size());
        vector<vector<Point> …
Run Code Online (Sandbox Code Playgroud)

opencv

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