我的团队有使用 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 …
对于下一个嵌入式系统项目,我希望进行单元测试。从技术上讲,它可能不是测试驱动的开发,但我至少希望预先对单元测试进行测试并进行全面的单元测试。
我正在使用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)
然后在任务的所有应用程序代码中,我只需要模拟消息传递并延迟对内核的调用。
那是做到这一点的最好方法。还是我更适合启动内核,为我的测试运行者创建任务,并从一个线程中运行所有任务,或者是否有其他好的方法涉及从测试工具中生成其他任务。
我正处于制定新项目的初期阶段.
我定义了一个返回类型为"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的解释是错误的还是他们发现了?
我知道取消引用空指针是未定义的 - 但我想知道在特定目标上发生了什么 - 一个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编译器/汇编器/模拟器.
请考虑维基百科关于平方根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)