【发布时间】:2021-11-01 18:45:37
【问题描述】:
我需要在 C 中生成一个随机数,我使用 srand() 和 rand() 函数完成了它。当我在普通编译器中运行它时它工作正常,但是当我尝试在 Contiki OS 中编译文件时,它会抛出一个“未定义的时钟获取时间引用”错误。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
int a;
srand(time(NULL));
a=rand() % 10000 + 2;
char *str = (char*)malloc(a);
int i=0;
for(i=0; i<a-1;i++){
str[i]='s';
}
str[i] = '\0';
strcat(str,"Hello %d from the client ");
sprintf(buf,str, seq_id);
有人可以帮我解决这个问题吗?
【问题讨论】:
-
main()函数在哪里?您不能在函数之外拥有所有这些代码 -
strcat调用会导致缓冲区溢出。 -
欢迎来到 *!请拨打tour 并阅读“How to Ask”以了解本网站的运作方式。 -- 请不要发布代码或文本的图像。逐字复制。 -- 请查阅 Contiki 的文档,您可能需要提供该错过的功能才能调用
time()。可以去掉time()的调用,使用rand()内部预定义或未定义的初始值。 -
@rturrado - 不太可能提供帮助。目标嵌入在 MSP430 MCU 中 - 甚至没有给定它具有使用时间源的 RTC。这必须由 BSP 或用户提供。除了这里的要求是获得合适的 PRNG 种子,而不是实际获得时钟时间。这个平台有更合适的方法。
-
@rturrado :这很公平,尤其是问题被错误标记为“Ubuntu”并且从未提及目标。 MSP430 仅在屏幕截图中可见。我不确定“更彻底” - 我在嵌入式系统方面拥有 30 多年的经验,并且正在做出有根据的猜测。我从未使用过 Contiki——据我所知,使用 Newlib 而不是 glibc,这对于 Contiki 所针对的资源受限的嵌入式系统来说是有意义的。
标签: c embedded msp430 contiki srand