小编Rob*_*bbG的帖子

如何确保枚举和数组在编译时具有相同的条目?

这适用于在uC上以低级别运行的嵌入式应用程序.系统的另一部分需要设置参数,本地uC需要维护参数列表.每个参数由8位ID和8位值组成.由于另一端的内存限制,ID从0x70开始.

为了尽可能降低内存使用率,我已将参数存储实现为包含所有可写参数的ID和值的数组.然后在头文件中有这些参数的枚举列表,以允许应用程序的其他部分访问参数.

有没有办法确保枚举列表和参数数组在相同的顺序中具有相同的条目?我已经相当彻底地记录了代码(并没有全部包含在提取中)但是我想在编译时进行某种形式的检查以确保列表和数组匹配.

我不确定的另一件事是,这是否是实现这一目标的最有效方式.我需要能够遍历参数,以便将它们传输到系统的其他部分,我需要尽可能少地使用内存.

来自parameters.h:

/*******************************************************************************/
/* IDs for all parameters must be defined                                      */
/* Defaults only need to be defined for rut-time writable parameters           */
/* All parameters must have an ID define                                       */
/* Writable parameters must also have:                                         */
/*    * DefaultValue define                                                    */
/*    * Entry in ParamIndex                                                    */
/*    * Initialesed default entry in Parameters (contained in C file)          */
/*    * If min and max values are not 0x00 and 0xFF …
Run Code Online (Sandbox Code Playgroud)

c arrays embedded enums

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

为什么这个 str.format 会导致 Python 中的关键错误

我在 python 2.7.10 脚本中有以下代码

params = {'F': '250', 'I': '-22.5', 'J': '-22.5', 'Y': '12.817175976', 'X': '7.4', 'Z': '-50'}
G3 = 'G3 F {F} I {I} J {J} X {X} Y {Y} Z {Z}  \n'
print(params)
print(G3)
print(G3.format(params))
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,它会提供以下输出:

./g-codeGenerator.py
{'F': '250', 'I': '-22.5', 'J': '-22.5', 'Y': '12.817175976', 'X': '7.4', 'Z': '-50'}
G3 F {F} I {I} J {J} X {X} Y {Y} Z {Z} 

Traceback (most recent call last):
  **Traceback truncated**
  File "./g-codeGenerator.py", line 342, in siliconOutputSequence
    print(G3.format(params))
KeyError: 'F' …
Run Code Online (Sandbox Code Playgroud)

python string-formatting python-2.7

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

是什么导致宏名称错误后缺少空格?

我正在 MPLAB X v3.35 中为 PIC24F 开发一个项目。在过去几周的某个时候,编译器开始为编译中的每一行发出以下警告。编译器行中的什么可能导致这种情况?列号似乎没有指向任何有意义的东西,唯一不是由 MPLAB 生成的就是-DGIT_VERSION="v1.0-1-g14e8d84-d我在许多其他项目中使用的类似版本的标志。

"C:\Program Files (x86)\Microchip\xc16\v1.26\bin\xc16-gcc.exe"   mcc_generated_files/oc4.c  -o build/PICkit3-XP/production/mcc_generated_files/oc4.o  -c -mcpu=24FJ64GA002  -MMD -MF "build/PICkit3-XP/production/mcc_generated_files/oc4.o.d"        -g -omf=elf -DGIT_VERSION="v1.0-1-g14e8d84-d" -DXPRJ_PICkit3-XP=PICkit3-XP  -legacy-libc    -I"mcc_generated_files" -I"../inc" -I"../dn-rdm-slave.X" -O0 -msmart-io=1 -Wall -msfr-warn=off  
<command-line>:0:13: warning: missing whitespace after the macro name
Run Code Online (Sandbox Code Playgroud)

c microchip mplab xc16

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

这个shell命令有什么问题

我正在尝试在我们的一个嵌入式设备上为busybox编写一个shell脚本来工作.导致问题的行在下面,我已经将它的输出包含在带有-x标志的shell中.

if [ cut -d : -f 1-3 /sys/class/net/eth0/address | grep -q -i 01:02:03 ]; then
    # Do stuff
fi
Run Code Online (Sandbox Code Playgroud)

尝试运行时给出的输出:

# sh -x ./script
+ [ cut -d : -f 1-3 /sys/class/net/eth0/address
sh: missing ]
+ grep -q -i 01:02:03 ]
grep: ]: No such file or directory
+ sync
Run Code Online (Sandbox Code Playgroud)

我最初没有编写脚本,所以我不知道它什么时候停止工作.似乎用于比较的命令(如果mac地址前缀与给定样本匹配则应返回1,否则返回0)未正确运行但我不知道为什么它似乎试图将命令分离出来.

shell busybox

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