小编Nic*_*ick的帖子

Doxygen for Windows 中 DOT 路径的环境变量

我的团队有使用 Windows 和 Linux 的开发人员。我们将 Doxyfiles 存储在我们的版本控制系统中。因此,我们将 DOT_PATH 留空,当我从 repo 中提取代码进行代码审查时,我总是需要在本地修改 DOT_PATH。我可以以某种方式修改 Windows 中的 PATH 环境变量,以便在 DOT_PATH 为空时 Doxygen 总能找到 Dot 吗?该文档听起来像我应该能够:

# The DOT_PATH tag can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found in the path.
# This tag requires that the tag HAVE_DOT is set to YES.

DOT_PATH               =
Run Code Online (Sandbox Code Playgroud)

我为我的 Windows 帐户编辑​​了 PATH 变量并放入了我的点路径,C:\Program Files (x86)\Graphviz2.30\bin\当我输入path …

doxygen dot environment-variables

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

对使用RTOS的项目进行单元测试

对于下一个嵌入式系统项目,我希望进行单元测试。从技术上讲,它可能不是测试驱动的开发,但我至少希望预先对单元测试进行测试并进行全面的单元测试。

我正在使用IAR EWARM工具链。我正在考虑使用cmocka,Unity或Cunit。我正在学习将µC / OS-III用作RTOS。

问题是:图片中的RTOS如何进行单元测试?EG:我应该禁用内核并作为单线程应用程序对代码进行单元测试,并对所有/大多数内核调用进行存根,还是有更好的方法?

示例: 在µC / OS-III中,入口仍然是主要入口。从main调用任何初始化代码,然后调用OSStart()开始多任务处理。因此,当我运行测试工具时,我无法调用OSStart()

#ifdef UNIT_TEST
test_runner();
#else
OSStart(&err);
#endif
Run Code Online (Sandbox Code Playgroud)

然后在任务的所有应用程序代码中,我只需要模拟消息传递并延迟对内核的调用。

那是做到这一点的最好方法。还是我更适合启动内核,为我的测试运行者创建任务,并从一个线程中运行所有任务,或者是否有其他好的方法涉及从测试工具中生成其他任务。

c unit-testing rtos ucos

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

MISRA C 2012是否说不要使用bool

我正处于制定新项目的初期阶段.

我定义了一个返回类型为"bool"的函数

我从PC-Lint得到了这个输出

    Including file sockets.h (hdr)
bool sock_close(uint8_t socket_id);
^
"LINT: sockets.h (52, 1) Note 970: Use of modifier or type '_Bool' outside of a typedef [MISRA 2012 Directive 4.6, advisory]"
Run Code Online (Sandbox Code Playgroud)

我继续在另一个标题中定义了这个以关闭lint:

typedef bool bool_t;
Run Code Online (Sandbox Code Playgroud)

然后我开始想知道为什么我必须这样做以及为什么它改变了什么.我转向MISRA 2012 Dir 4.6.它主要关注基本类型的宽度,如short,int和long,它们的宽度以及它们的签名方式.

该标准没有给出任何放大,合理,例外或bool的例子.

bool在C99中的stdbool.h中明确定义为_Bool.那么这个标准真的适用于bool吗?

根据C99的第6.2.5节,我认为_Bool明确地始终是"最小的标准无符号整数类型,足以存储值0和1".所以我们知道bool是无符号的.那么问题就在于_Bool不是固定的宽度而且主题被提升的某种方式是问题吗?因为理性似乎与这个概念相矛盾.

遵守本指南并不保证可移植性,因为int类型的大小可能决定表达式是否受整数提升的影响.

如何typedef bool bool_t;改变任何东西 - 因为我没有做任何表示这样做的宽度或标记?bool_t的宽度也将取决于平台.有没有更好的方法重新定义布尔?

除非实现的类型实际上具有该长度,否则不能使用特定长度定义类型

所以typedef bool bool8_t;应该完全违法.

Gimpel对指令4.6的解释是错误的还是他们发现了?

c c99 misra language-lawyer pc-lint

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

在MSP430上,当我取消引用空指针时会发生什么?

我知道取消引用空指针是未定义的 - 但我想知道在特定目标上发生了什么 - 一个MSP430.

我现在没有一块板可以在我面前加载它来测试它.

如果我这样做(或者类似的话)会发生什么?

int * foo = NULL;
(*foo)++; //Crash?
Run Code Online (Sandbox Code Playgroud)

位置0x0在SFR范围内并保留.

它会产生PUC/POR吗?还是会默默地"工作"?

生成的程序集是

;int * foo = NULL;
clr.w   R15
;(*foo)++;
inc.w   R15
Run Code Online (Sandbox Code Playgroud)

因此,位置0x0实际上是递增1.

当我在模拟器中运行它时,我看到地址0x0的值从0变为1.我在调试日志中没有警告,程序正常退出.

我正在使用IAR EW430编译器/汇编器/模拟器.

c pointers msp430 null-pointer iar

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

为什么某些程序员习惯使用长位移位而不是直接赋值或将其存储为常量

请考虑维基百科关于平方根algorythms的文章中的以下代码

short isqrt(short num) {
     short res = 0;
     short bit = 1 << 14; // The second-to-top bit is set: 1 << 30 for 32 bits

     // "bit" starts at the highest power of four <= the argument.
     while (bit > num)
        bit >>= 2;

     while (bit != 0) {
        if (num >= res + bit) {
            num -= res + bit;
            res = (res >> 1) + bit;
        }
        else
            res >>= 1;
        bit >>= 2; …
Run Code Online (Sandbox Code Playgroud)

c assembly bit-shift

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