我正在尝试编写一个小进程线程,它将侦听传入的数据,将其写入闪存,然后再读取它。代码如下所示
PROCESS(test_serial, "serial");
PROCESS(read_file, "readfile");
AUTOSTART_PROCESSES(&test_serial);
PROCESS_THREAD(read_file, ev, data)
{
PROCESS_BEGIN();
int r = 0;
if(cfs_seek(fd, 0, CFS_SEEK_SET) != 0) {
printf("seek failed\n");
cfs_close(fd);
}
while (total_bytes_written > 0)
{
uint8_t testbuff[10] = {0};
r = cfs_read(fd, testbuff, 10);
if(r != 10) {
LOG_ERR("failed to read %d bytes, read only %d",total_bytes_written, r);
cfs_close(fd);
total_bytes_written = r;
}
total_bytes_written -= r;
}
total_bytes_written = 0;
cfs_close(fd);
PROCESS_END();
}
PROCESS_THREAD(test_serial, ev, data)
{
PROCESS_BEGIN();
while(1) {
PROCESS_YIELD();
if(ev == serial_line_event_message) {
switch (*(uint8_t *)data)
{
case BEGINN:
open_file();
write_to_flash((uint8_t *)(data + 1));
break;
case CONTINUE:
write_to_flash((uint8_t *)(data + 1));
break;
case END:
write_to_flash((uint8_t *)(data + 1));
process_start(&read_file, NULL);
break;
default:
break;
}
}
}
PROCESS_END();
}写到flash作品,因此我没有包括代码。这段代码非常类似于contiki文档中的示例。
每次我写到闪存时,total_bytes_written都会增加。在接收到所有字节后,我尝试读取它们。问题是,当process.c调用事件计时器的do_poll时,进程似乎停止了,之后不再继续。据我理解,AUTOSTART_PROCESSES将我的流程添加到Contiki的进程列表中。因此,Contiki应该在事件计时器轮询之后恢复我的进程,因为事件没有什么可做的,而且我没有任何其他进程在运行?
发布于 2022-01-05 13:49:12
看起来,这一进程并没有停止。问题是,一旦发生了另一个事件,日志记录就会停止。当我创建一个触发事件日志记录的小脚本时,它有足够的时间在下一个事件之前记录所有内容。现在唯一的错误是如何不间断地应用日志记录。
https://stackoverflow.com/questions/70410866
复制相似问题