小编nas*_*ass的帖子

用于freescale iMX6q ARM处理器的gcc选项

我正在试图找出我正在设置的工具链的gcc选项,用于开发板:Sabre-lite,它基于飞思卡尔的iMX6q四核处理器.

现在我知道iMX6基本上是一个cortex-a9处理器,它有协处理器vfpv3和霓虹灯,还有矢量图形,2D甚至3D引擎.

但是,发行说明和使用指南文档对于如何启用可在gcc中启用的任何选项并不太清楚.

事实上,我可以"玩"的选项如下.

-march= armv7-a                - ok this one is pretty obvious.
-mfpu= vfpv3/neon              - i can use only the vfpv3 co-processor, or both (respectively, depends on option)
-mfloat-abi=softfp/soft/hard   - I guess I can choose hard here, as there is hardware for fp operations
-mcpu=cortex-a9                - is it option even necessary? it is not clear if it just an alias for -march or something else.
Run Code Online (Sandbox Code Playgroud)

我应该启用其他选项吗?为什么工具链具有构建linux内核/ uboot/packages的默认选项:

-march= armv7-a -mfpu= vfpv3 -mfloat-abi=softfp
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助

gcc arm toolchain

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

如何在不更改 CMakeLists.txt 的情况下将 CFLAGS 和 CXXFLAGS 传递给 cmake(也许通过 CLI?)

我无法更改我所从事的项目的 CMakeLists.txt,并且其中使用的 cmake 工具链文件仅声明要发布的 C 和 CXX FLAGS。

因此,为了调试,我需要强制使用自己的标志(即将 -O0 -DDEBUG 附加到 CFLAGS 和 CXXFLAGS)。

所以我尝试使用以下示例通过 cli

主要.cpp:

#include <iostream>

int main(int argc, char * argv[])
{
    std::cout << "hello world\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

CMakeLists.txt:

cmake_minimum_required(VERSION 3.1)

set_property(GLOBAL PROPERTY USE_FOLDERS ON)

#prescon settings
project(cmakecflags)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CXX_EXTENSIONS NO)

enable_testing()

add_executable(cmakecflagsapp
    main.cpp
)

message(CFLAGS=${CFLAGS})
message(CXXFLAGS=${CXXFLAGS})
Run Code Online (Sandbox Code Playgroud)

调用cmake:

CFLAGS=' -O0 -DDEBUG ' CXXFLAGS=' -O0 -DDEBUG ' cmake -G 'Unix Makefiles' -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_BUILD_TYPE=Debug .
Run Code Online (Sandbox Code Playgroud)

结果如预期,使 2 个变量为空

-- The C compiler identification …
Run Code Online (Sandbox Code Playgroud)

c++ cmake command-line-interface cflags

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

malloc上的sigsev错误让我疯了

这段C代码在gdb中给出了分段错误

if ((seq_entry_action=malloc((seq_subphases)*sizeof(int*)))==NULL){
    printf("Cannot allocate memory for seq_entry_action\n");
}
Run Code Online (Sandbox Code Playgroud)

哪里:

int **seq_entry_action=NULL;
unsigned int seq_subphases=0;
Run Code Online (Sandbox Code Playgroud)

在执行时,如果我在这段代码之前在gdb中添加一个断点(它只是另一个printf()语句),那么值是

(gdb) p seq_subphases
$3 = 88
(gdb) p seq_entry_action
$4 = (int **) 0x0
Run Code Online (Sandbox Code Playgroud)

然后我按下接下来它在malloc上的段错误

我真的不明白.....

c malloc gdb segmentation-fault

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

如何在相机 - 投影仪系统中重新投影点(校准后)

我见过很多的博客文章和视频,并源折轴有关如何使用OpenCV的执行相机+投影机标定在互联网上,以生产camera.yml,projector.ymlprojectorExtrinsics.yml文件.

我之后还没有看到有人讨论如何处理这些文件.事实上,我自己做过校准,但我不知道自己应用程序的下一步是什么.

假设我编写的应用程序现在使用相机 - 我校准的投影仪系统来跟踪对象并在其上投影.我将使用contourFind()从移动物体中抓取一些感兴趣的点,现在我想将这些点(从投影仪!)投射到物体上!

我想要做的是(例如)跟踪对象的质心(COM)并在跟踪对象的摄像机视图上显示一个点(在其COM处).然后应该在物体的COM上实时投射一个点.

这似乎projectPoints()是我在加载yml文件后应该使用的openCV函数,但我不确定如何考虑相机和投影仪的所有内在和外在校准值.即,projectPoints()需要作为参数

  • 矢量点重新投射(呃!)
  • 旋转+平移矩阵.我想我可以在这里使用projectorExtrinsics.或者我可以使用composeRT()函数从projectorExtrinsics(我在yml文件中)和cameraExtrinsics(我没有)生成最终旋转和最终翻译矩阵.旁边问题:我不应该保存它们在一个文件??).
  • 内在矩阵.现在这很棘手.我应该在这里使用相机还是投影仪内在函数矩阵?
  • 失真系数.我应该再次使用投影机或相机系数吗?
  • 其他参数......

因此,如果我使用投影仪或相机(哪一个??)内在函数+系数projectPoints(),那么我只会'纠正'2个乐器中的一个.我在哪里/如何使用对方的内在函数?

除了load()yml文件之外我还需要使用 projectPoints()什么?(也许是不成正比的?)

非常感谢任何有关此事的帮助.如果有教程或书籍(不,O'Reilly"学习openCV"也没有谈论如何使用校准yml文件! - 仅关于如何进行实际校准),请指出我的方向.我不一定需要一个确切的答案!

c++ camera opencv projection

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

我该如何使用strace来搜索串口?

我正在linux中编写一个应用程序,需要访问串口.出于调试目的,我需要查看来自和/或通过串行端口的内容.

我环顾四周,发现我可以使用strace来做到这一点.所以我尝试了以下方法:

-I打印我使用的串行设备的file_descriptor.

(重新启动我的应用程序几次后,我向自己保证,我的应用程序从内核获取的file_descriptor数字是"4"

- 如果我启动我的应用程序strace -e write=4 ./myapp,我希望在终端中获取消息,仅来自file_descriptor"4".相反,我得到输出的looots:

read(5, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\300Q\254C4\0\0\0"..., 52
fstat64(5, {st_mode=S_IFREG|0644, st_size=1448930, ...}) = 0                    
mmap2(0x43ab8000, 153816, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 5, 0)0
mprotect(0x43ad6000, 28672, PROT_NONE)  = 0                                     
mmap2(0x43add000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRI0
close(5)                                = 0                                     
munmap(0x2ab4c000, 38409)               = 0                                     
exit(0)   
Run Code Online (Sandbox Code Playgroud)

来自几个不同的file_descriptors.

如果我运行我的应用程序 strace -e trace=write -e write=4 ./myapp

我会得到更少的消息,即使它们仍然很多,或者file_descriptor"1".

write(1, "GPIO data bank:0x8, data: 0x80 a"..., 52GPIO data bank:0x8, data: 0x81) = 52                                                                          
write(1, "\n", 1)   = 1                                                     
write(1, "--> Version: 0677 <--\n", 22--> Version: 0677 <-- …
Run Code Online (Sandbox Code Playgroud)

c linux serialization sniffing strace

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

L在"<任何十六进制数> L"中表示什么

我正在查看一些c ++代码,我遇到了这个:

if( (size & 0x03L) != 0 )
    throw MalformedBundleException( "bundle size must be multiple of four" );
Run Code Online (Sandbox Code Playgroud)

L在十六进制值之后的含义是什么?

它是如何改变价值的0x03

c++ hex

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

将bash数组(字符串和特殊字符)写入文件

我有一个bash数组OUTARRAY,我填充将处理一个值INARRAY.我经常追加到OUTARRAY特殊字符,即\t\n 因此它可能看起来像:

OUTARRAY[j]="\n"
Run Code Online (Sandbox Code Playgroud)

要么

OUTARRAY[j]="${INARRAY[i]}\t"
Run Code Online (Sandbox Code Playgroud)

最后我将OUTARRAY文件转储到文件中

printf "%s" "${OUTARRAY[@]}" > ${OUTFILE}
Run Code Online (Sandbox Code Playgroud)

然而,我得到的结果是,单行文件中打印了所有特殊字符:

\n2771\t2899\t7624\t2911\t\n2772\t2904\t7706\t2911\t\n2771\t2909
Run Code Online (Sandbox Code Playgroud)

相反,我想要圆柱输出.就像是

2771    2899    7624    2911
2772    2904    7706    2911
Run Code Online (Sandbox Code Playgroud)

等等.我做错了什么?谢谢

arrays bash

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

C++中"仍然可以访问"和"可能丢失"的块的valgrind输出不会引用我的源代码

我很难确定我的代码中的内存泄漏位置.

我运行的valgrind命令:

valgrind --leak-check=full --log-file=vg1.log --show-leak-kinds=all --leak-resolution=low --track-origins=yes --leak-check-heuristics=all ./enalu_dbg
Run Code Online (Sandbox Code Playgroud)

和输出

==22866== Memcheck, a memory error detector
==22866== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==22866== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
==22866== Command: ./enalu_dbg
==22866== Parent PID: 21933
==22866== 
==22866== 
==22866== HEAP SUMMARY:
==22866==     in use at exit: 47,252 bytes in 240 blocks
==22866==   total heap usage: 288 allocs, 48 frees, 55,138 bytes allocated
==22866== 
==22866== 4 bytes in 1 blocks …
Run Code Online (Sandbox Code Playgroud)

c++ boost valgrind memory-leaks

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

替换生成文件的 $(SOURCES) 中的文件夹路径

我正在寻找一种方法来替换 makefile 中源文件变量列表中的文件夹。

有什么可以在这里工作的吗?

我首先找到我的源文件

program_C_SRCS := $(wildcard  $(SRCDIR)/*.c)
program_CXX_SRCS := $(wildcard $(SRCDIR)/*.cpp)
Run Code Online (Sandbox Code Playgroud)

结果(如果我正确理解 GNU 生成文件)通常看起来像

src/main.cpp
src/sensor.cpp

然后我通过目标文件构建

program_C_OBJS := ${program_C_SRCS:.c=.o}
program_CXX_OBJS := ${program_CXX_SRCS:.cpp=.opp}
Run Code Online (Sandbox Code Playgroud)

这按预期替换了我的源文件的扩展名。

最后,我想用“obj/”替换“src/”

program_C_OBJPATH := ${subst $(SRCDIR) , $(OBJDIR) , $(program_C_OBJS)}
program_CXX_OBJPATH := ${subst $(SRCDIR) , $(OBJDIR) , $(program_CXX_OBJS)}
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用。

我已经浏览了 GNU makefile 网站,但无济于事。这个解决方案Makefile 将来自不同目录的源文件的目标文件放入一个单独的目录中?接近但对象目录必须明确包含在任何地方,并且源目录不包含源路径信息。

在我的 makefile 中,源文件列表包含路径,我希望目标文件列表也包含相应的目标目录。

makefile 的其余部分也尝试使用变量

连接阶段

$(program_NAME): $(program_OBJS)
    $(CXX) $(CFLAGS) $(CXXFLAGS) $(LDFLAGS) $(program_OBJS) -o "$(program_NAME)"
Run Code Online (Sandbox Code Playgroud)

编译阶段

%.opp : %.cpp | mkdirobjdir
    $(CXX) $(CFLAGS) $(CXXFLAGS) $(CPPFLAGS) -c -o "$@" "$<" …
Run Code Online (Sandbox Code Playgroud)

makefile

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

将局部变量传递给线程.可能吗?

我正在研究gcc,我想知道这是否可行:

我有一个函数(NOTmain但是aLocalFn),我在其中声明了一个局部变量.然后我将此局部参数作为线程参数传递.它可行吗?或者有机会(取决于先运行的是什么)在运行threadFunction之前aLocalVar会丢失,而引用idxPtr将指向无意义?

int *threadFunction(void *idxPtr){
    int rec_idx=(int) *idxPtr;

    //work in the thread with this variabel rec_idx
}

int aLocalFn(){
   int aLocalVar=returnsRecordIndex();

   pthread_create(&thread_id,&attr_detached,threadFunction, &aLocalVar)!=0)
   return 0;
}   
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助

c multithreading arguments local-variables

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

如何使用占位符替换为Bash中变量的值来打印文本?

我不确定我是否正确说明了这一点.

这是我在bash脚本中的内容

ATEXT="this is a number ${i} inside a text string"
Run Code Online (Sandbox Code Playgroud)

然后我希望${i}在以下for循环中解决.

for i in {1..3}; do
    echo "${ATEXT}"
done
Run Code Online (Sandbox Code Playgroud)

当然上面的方法不起作用,因为iATEXT读取变量时会解析.

但是,我不知道如何实现我想要的.这是获得输出:

this is a number 1 inside a text string
this is a number 2 inside a text string
this is a number 3 inside a text string
Run Code Online (Sandbox Code Playgroud)

bash

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

c ++,pthread和静态回调."this"返回指向基类的指针而不是派生类(第2部分)

这个线程是在这里开始的,但是由于缺乏一个完整的好例子(并且为了避免删除所有那个问题),这里重写了它.

因此,在以下示例中,void cppthread::ThreadedFunc()生成的gets作为单独的线程执行.相反,我宁愿void ThreadedWrite::ThreadedFunc()被执行.我怎样才能做到这一点?(代码后面还有一些细节)

cppthread.hpp

#ifndef CPPTHREAD_HPP
#define CPPTHREAD_HPP

#include <pthread.h>

using namespace std;

class cppthread
{
    public:
        cppthread();
        virtual ~cppthread();

        virtual void threadedFunc();
        ///parentObj (ie "this" pte from caller") is 
        ///necessary in order to execute the correct
        ///threadedFunc() even when the derived class
        ///wants to spawn a thread.
        int spawn(void *parentObj = NULL);
        void terminate();

    protected:
        pthread_mutex_t mtx;
        bool exitThread;

    private:
        /* add your private declarations */
        int join();

        pthread_t threadId; …
Run Code Online (Sandbox Code Playgroud)

c++ pthreads callback this derived-class

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

sizeof(struct)返回的SMALLER小于预期值吗?

我有这个c ++结构:

struct Packet
{
    uint32 MessageCount; 
    uint32 Length; 
    uint32 FieldValue;

    union PacketHeader
    {
        uint32 typeInfo; 
        struct MagicVersion
        {
            uint8 MagicNumber[3];
            uint8 Version; 
        };
     };

    Data * Payload(void) { return reinterpret_cast< Data * >(this + 1U); }
    Data const * Payload(void) const { return reinterpret_cast< Data const * >(this + 1U); }

    Packet * nextPacket(void) { return reinterpret_cast< Packet * >(this + 1U) + Length; }
    Packet const * nextPacket(void) const { return reinterpret_cast< Packet const * >(this + 1U) …
Run Code Online (Sandbox Code Playgroud)

c++ struct sizeof

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