小编iva*_*rec的帖子

如何使用Clang的静态分析仪跟踪变量?

假设我正在使用以下C片段:

void inc(int *num) {*num++;}
void dec(int *num) {*num--;}

void f(int var) {
    inc(&var);
    dec(&var);
}
Run Code Online (Sandbox Code Playgroud)

通过使用静态分析器,我希望能够判断var的值在函数执行期间是否没有改变.我知道我必须自己保持状态(这是编写一个Clang检查器的重点),但是我遇到麻烦得到这个变量的唯一引用.

例如:如果我使用以下API

void MySimpleChecker::checkPostCall(const CallEvent &Call,
                                    CheckerContext &C) const {
    SymbolRef MyArg = Call.getArgSVal(0).getAsSymbol();
}
Run Code Online (Sandbox Code Playgroud)

我希望它在我的检查器上下文中返回指向此符号表示的指针.但是,我总是以这种方式使用它来进入MyArg 0.对于回调回调中的incdec函数都会发生这种情况.

我在这里错过了什么?我出错了什么概念?

注意:我目前正在阅读Clang CFE Internals Manual,我已经阅读了24小时内如何编写Checker材料.到目前为止我还是找不到答案.

static-analysis clang clang-static-analyzer

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

使用Erlang进行嵌入式开发是否切合实际?

如果是这样,存储和内存占用量是多少?

编辑

我对此做了一些研究,但没有找到有用的信息.该网站http://www.erlang-embedded.com/完全没有帮助.博客文章http://www.1011ltd.com/web/blog/post/embedded_erlang有点帮助,但听到有更多经验的人的答案会很高兴.

编辑2

我打算用于Erlang的硬件具有32Mb的系统FLASH存储空间和512Mb的RAM.它是双核,每核400Mhz.它运行Linux版本2.6.18.

编辑3

我对Erlang感兴趣的动机是解决优雅的并发问题.在我工作的项目中,我们有一些不健壮的复杂中间件软件,很难理解,也很难扩展.当然,您可以在C中编写出色的并发软件,但Erlang似乎是这个问题域的更好工具.

embedded erlang

19
推荐指数
3
解决办法
5751
查看次数

如何检查模板参数是否为2的幂?

我想创建一个静态分配2 ^ N字节数组的结构,但我不希望此结构的用户将此大小指定为指数.例:

my_stupid_array<char, 32> a1; // I want this!
my_stupid_array<char, 5> a2; // And not this...
Run Code Online (Sandbox Code Playgroud)

如何检查此模板参数是否为2的幂警告用户有关于此的好消息?

我已经能够通过一个简单的模板检查这个:

template<int N>
struct is_power_of_two {
    enum {val = (N >= 1) & !(N & (N - 1))};
};
Run Code Online (Sandbox Code Playgroud)

但是,我无法通过合理的消息警告用户.有任何想法吗?

编辑

修复了模棱两可的例子.

编辑

1确实是2的幂.修好了!:)

编辑

使用BOOST_STATIC_ASSERT,我收到此代码与GCC的编译错误:

template<int N>
struct is_power_of_two {
    enum {val = (N >= 1) & !(N & (N - 1))};
    BOOST_STATIC_ASSERT(val);
};
Run Code Online (Sandbox Code Playgroud)

错误

..\main.cpp:29:1: error: invalid application of 'sizeof' to incomplete type 'boost::STATIC_ASSERTION_FAILURE<false>' 
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/cMfEf

编辑 …

c++ templates static-assert constexpr c++11

16
推荐指数
3
解决办法
4170
查看次数

如何在STM32设备中调试意外重置?

我正在使用STM32F107芯片在C中进行一些开发,并且在某些时候,当我调用特定函数时,设备开始重置.我没有调试器,我的调试只是串口上的纯文本.

我已经使用了一些其他的微控制器,我可以访问寄存器来查看复位的原因,但我似乎无法找到该器件的等效器件.我知道Cortex-M3的硬件异常,但我不知道其中一个是否被触发,因为当我进入这些处理程序时,我似乎无法通过usart发送文本(可能是因为我的TX功能使用中断?).

所以,我决定在这个设备中询问比我更多经验的人:调试这些情况通常会做些什么?

编辑

其中一个开发人员激活了WWDG监视器,它在我从故障处理程序获取信息之前重置了硬件.由于指向错误位置的指针调用函数,这是一个硬故障.但是,我会保留这个问题,希望有人能提供更多的细节(或关于它的材料),以便从保存的寄存器中指回C代码,比如硬故障(@dwelch的想法).

embedded cortex-m3 stm32 interrupt-handling

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

如何使用Delphi从USB存储设备读取原始块?

我正在处理包含专有文件系统的USB存储设备.因此,我需要读取这些设备的512字节块来实现此文件系统的查看器.

我该怎么办呢?使用Delphi有一些材料吗?

filesystems delphi usb

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

如何让eclipse在C++ Existing Makefile项目中确认我的包含文件?

简单的问题:我有一个为现有makefile配置的C++项目,它编译得很好.但是,IDE一直在抱怨它无法解析我的大多数符号.

如何配置eclipse以使用我的包含?

eclipse eclipse-cdt

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

当与fakeroot和fakechroot一起使用时,Gentoo + debootstrap失败

我正在使用Gentoo框,我想在不使用root帐户或sudo的情况下创建基于Debian的chroot环境.

这似乎可以使用fakerootfakechroot等工具,但到目前为止我还没有取得任何成功.这是我用于Precise的命令:

fakeroot fakechroot /usr/sbin/debootstrap --variant=fakechroot precise ./precise http://archive.ubuntu.com/ubuntu/
Run Code Online (Sandbox Code Playgroud)

它始终失败并出现相同的错误:

I: Installing core packages...
W: Failure trying to run: chroot precise dpkg --force-depends --install /var/cache/apt/archives/base-passwd_3.5.24_amd64.deb
W: See precise/debootstrap/debootstrap.log for details
Run Code Online (Sandbox Code Playgroud)

debootstrap.log的内容是:

dpkg: error while loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我不知道为什么SELinux被拉进来以及为什么它没有正确处理这种依赖.此外,我也试图建立Wheezy和Jessie.同样的错误.

这是怎么回事?版本:

debootstrap的-1.0.67

fakeroot的-1.19

fakechroot-2.17.2

内核3.19.6

ubuntu debian chroot gentoo bootstrapper

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

如何强制Google Maps API v3放弃触控支持?

我正在使用基于Chromium Embedded项目的Delphi组件.在使用一些Javascript代码在测试HTML中导航以访问Google Maps API时,它会显示启用触摸的设备的控件.

我已经看到这个问题已经在项目的svn中修复了,但是我正在经历地狱来编译那些东西.

但是,如果我访问maps.google.com网站(而不是我使用Javascript测试HTML),我的组件将显示非触摸设备的控件.

所以,我想知道...有没有办法迫使谷歌地图v3 API接受我作为非触摸设备?

编辑:在下面添加用户代理和测试用例.

用户代理:

Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.36 (KHTML, like Gecko) Chrome/12.0.742.53 Safari/534.36
Run Code Online (Sandbox Code Playgroud)

测试用例:

<!DOCTYPE html>
<html>
  <head>
    <style type="text/css">
      html { height: 100% }
      body { height: 100%; margin: 0px; padding: 0px }
      #map_canvas { height: 100% }
    </style>
    <script type="text/javascript"
        src="http://maps.googleapis.com/maps/api/js?sensor=false&language=pt_BR&region=BR">
    </script>
    <script type="text/javascript">
      var map;
      function initialize() {
      var latlng_map = new google.maps.LatLng(-23.510700, -46.602300);
      var myOptions_map = {
      zoom: 15,
      center: latlng_map,
      mapTypeId: google.maps.MapTypeId.ROADMAP
      }; …
Run Code Online (Sandbox Code Playgroud)

javascript delphi google-maps-api-3

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

如何调试在引导期间冻结的 Linux 内核?

我有一个带有二进制Linux 2.6.18的旧设备内核可以正常启动到它的 rootfs。但是,如果我尝试从源代码编译此内核,则生成的内核二进制文件将在引导期间冻结。我没有用于构建当前正常启动的先前内核二进制文件的 .config 文件。

启动冻结,没有提供错误输出。这是启动日志:

Linux version 2.6.18-6.2 (myuser@host) (gcc version 4.2.0 20070124 (prerelease) - BRCM 10ts-20080721) #10 SMP Sun Apr 28 18:25:24 BRT 2013
Fetching vars from bootloader... OK (E,d,B,C)
Detected 512 MB on MEMC0 (strap 0x23430310)
Board strapped at 512 MB, default is 256 MB
Options: sata=1 enet=1 emac_1=1 no_mdio=0 docsis=0 ebi_war=0 pci=1 smp=1
CPU revision is: 0002a044
FPU revision is: 00130001
Primary instruction cache 32kB, physically tagged, 2-way, linesize 64 bytes.
Primary data …
Run Code Online (Sandbox Code Playgroud)

linux debugging boot linux-kernel

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

如何在Delphi中添加和使用自定义包/组件中的资源?

我想创建一个使用我的包项目中编译的资源的组件.我的组件将尝试在运行时(在其构造函数中)使用此资源(PNG图像).

我想在我的应用程序的项目中使用它,但是只要组件被创建,我就会得到以下异常:

First chance exception at $7579B9BC. Exception class EResNotFound with message 'Resource xxx not found'. Process yyy.exe (6060)
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

编辑

包项目中资源的调用代码如下:

Png.LoadFromResourceName(HInstance, 'png_resource_name');
Run Code Online (Sandbox Code Playgroud)

编辑2

正如David所建议的,我尝试使用函数GetModuleHandle,但是如果我从包的项目应用程序的项目中调用它,它将始终返回0 .在包的项目中调用的代码是这样的:

PackageModuleHandle := GetModuleHandle(PChar('my_package.bpl'));
Png := TPngImage.Create;
Png .LoadFromResourceName(PackageModuleHandle, 'png_resource_name');
Run Code Online (Sandbox Code Playgroud)

bpl文件的绝对路径也不起作用.

编辑3

基于新答案的新尝试:

PackageModuleHandle := FindClassHInstance(TMyComponent);
Png := TPngImage.Create;
Png .LoadFromResourceName(PackageModuleHandle, 'png_resource_name');
Run Code Online (Sandbox Code Playgroud)

失败也有同样的例外.

编辑4

使用ResourceHacker,如果我正确使用它,资源似乎不在我的bpl文件中.我能做些什么呢?这么简单的功能似乎有这么复杂的问题.

结论

我必须在{$ R*.res}行之后将我的包的.res文件添加到包的.dpr中.像这样:

{$R *.res}
{$R 'my_pacakge.res'}
Run Code Online (Sandbox Code Playgroud)

此外,我必须将my_package.rc文件包含到我的项目中,因此在每次构建之后,资源将被编译到.res.我想这就是诀窍.感谢所有的答案.

delphi

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