我想知道是否有更快的方法来比较C中的字符串而不是使用strcmp(),特别是当我必须以switch语句方式比较字符串与多个预定义字符串时.在我的应用程序中,要比较的字符串有时可以大到1000个字符,所以只是想是否strcmp()足够,或者是否存在我不熟悉的更好,更有效的方法.我实际上正致力于低功耗嵌入式物联网项目,其中更多的CPU周期需要耗电.
在具有简单char数组(Interfaces.C.char数组)声明的Ada程序中,
package C renames Interfaces.C;
Msg : C.Char_Array(1..50) := (others => C.To_C(Item=>ASCII.NUL));
Run Code Online (Sandbox Code Playgroud)
在以下任务中获得了运行时异常"长度检查失败":
Msg := C.To_C(Item => "UNKNOWN ERROR",Append_Nul => True));
Run Code Online (Sandbox Code Playgroud)
引起异常的上述任务有什么问题?是否有任何简单的单行方式,我可以像上面那样直接写出较小的赋值给char数组?
我总是想知道一个项目/团队/公司如何选择或有资格选择像MISRA 1998/2004/2012这样的特定指南?如何确定和确定哪个指南足以满足项目要求(成本与时间对质量)?
(我知道他的问题有点生硬,但任何答案都会受到赞赏)
我正在研究STM32F777 mcu在FreeRTOS上创建应用程序.STM32F777带有双精度浮点单元.我在使用浮点单元时发现这个非常烦人的问题,当我使用常量或其他东西为浮点值赋值时,例如:
float x = 78.352361;
Run Code Online (Sandbox Code Playgroud)
调试时我看到分配给变量x的实际值是:78.3523636
类似地,当我将17.448636分配给变量x时,我在调试时实际看到的是17.4486351.
任何想法,为什么会发生这种情况以及如何解决这个问题?我希望保持正确的精度直到6位数.
我想为printf()我正在研究的输出终端是串口的嵌入式板写一个快速的功能.我试过这样的事情:
int32_t printfDebugSerial(const char *format, ...)
{
char tempBuff[256];
memset(tempBuff, 0, sizeof tempBuff);
va_list arg;
int32_t done;
va_start (arg, format);
done = (int32_t)sprintf(tempBuff,format, arg);
va_end (arg);
HAL_sendToSerial((uint8_t*)tempBuff, strlen(tempBuff)); // writes bytes to serial port
return done;
}
Run Code Online (Sandbox Code Playgroud)
但是当我调用它时,我得到的输出如下:
printfDebugSerial("Hello = %u", 1234);
Run Code Online (Sandbox Code Playgroud)
输出:
Hello = 536929228
Run Code Online (Sandbox Code Playgroud)
然后称为:
printfDebugSerial("Hello = %f", 934.3245);
Run Code Online (Sandbox Code Playgroud)
输出:
Hello = 0.000000
Run Code Online (Sandbox Code Playgroud)
任何帮助,这里有什么问题?
我在C中有一个1字节的pragma打包结构,我希望将其复制到一个字节数组中,以便通过串口发送序列化.
#pragma pack(push, 1)
typedef struct {
uint8_t ck_a;
uint8_t ck_b;
} UBXChecksum_t ;
#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)
将序列化为字节数组的最佳方法是什么,我应该使用memcpy()吗?
void writeStructToArray(const void* inStruct,
const uint16_t inLenStruct,
uint8_t* const outArray)
{
memcpy(outArray, inStruct, inLenStruct);
}
Run Code Online (Sandbox Code Playgroud)
或者更好地使用逐字节复制做指针类型转换?
void writeStructToArray(const void* inStruct,
const uint16_t inLenStruct,
uint8_t* const outArray)
{
for(uint16_t i = 0; i < inLenStruct; i++)
{
outArray[i] = ((uint8_t*)inStruct)[i];
}
}
Run Code Online (Sandbox Code Playgroud) c ×4
ada ×1
arrays ×1
coding-style ×1
compare ×1
misra ×1
pragma-pack ×1
strcmp ×1
string ×1
struct ×1