小编Aka*_*kay的帖子

比较C中字符串的最快方法

我想知道是否有更快的方法来比较C中的字符串而不是使用strcmp(),特别是当我必须以switch语句方式比较字符串与多个预定义字符串时.在我的应用程序中,要比较的字符串有时可以大到1000个字符,所以只是想是否strcmp()足够,或者是否存在我不熟悉的更好,更有效的方法.我实际上正致力于低功耗嵌入式物联网项目,其中更多的CPU周期需要耗电.

c string compare strcmp

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

ada中的char_array任务

在具有简单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数组?

ada

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

选择指南:MISRA 1998或MISRA 2004或MISRA 2012?

我总是想知道一个项目/团队/公司如何选择或有资格选择像MISRA 1998/2004/2012这样的特定指南?如何确定和确定哪个指南足以满足项目要求(成本与时间对质量)?

(我知道他的问题有点生硬,但任何答案都会受到赞赏)

coding-style misra

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

浮点精度与实际分配的值不匹配?

我正在研究STM32F777 mcu在FreeRTOS上创建应用程序.STM32F777带有双精度浮点单元.我在使用浮点单元时发现这个非常烦人的问题,当我使用常量或其他东西为浮点值赋值时,例如:

float x = 78.352361;
Run Code Online (Sandbox Code Playgroud)

调试时我看到分配给变量x的实际值是:78.3523636

类似地,当我将17.448636分配给变量x时,我在调试时实际看到的是17.4486351.

任何想法,为什么会发生这种情况以及如何解决这个问题?我希望保持正确的精度直到6位数.

c floating-point

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

在C中的可变参数函数下调用sprintf()

我想为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 variadic-functions

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

将结构复制到字节数组中

我在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 arrays struct pragma-pack

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