MDK使用仿真模式时 使用scanf函数就报错

在中秋节老师的直播的工程上进行修改,使用仿真模式时,包含scanf函数就编译报错,报错内容如下:

attachments-2021-10-5JfvKWS3615e6dc0a4cff.PNG
main.c程序内容里一个函数如下,只要写了scanf这句,就编译报错,屏蔽掉这句,就没错。

pclassmate Init_ListLink(short num)

{

pclassmate p,s,head;

int i=0;

head = (pclassmate)malloc(sizeof(pclassmate));

head->next_classmate = NULL;

p = head;

for (i=0;i<=num;i++)

{

s = (pclassmate)malloc(sizeof(pclassmate));

s = &student[i];

s->name = pArray[i];

        scanf("%s",s->next_classmate->name);  // add scanf(),report error: __use_no_semihosting was requested, but a semihosting fputc was linked in

s->next_classmate=NULL;

p->next_classmate =s;

p = p->next_classmate;

}

return p;


}

另外想问一下,这种仿真模式下如果写scanf,在哪里输入字符?会弹出来command window之类的东西吗?附件  07_link_list.rar 为工程文件,请参考。


请先 登录 后评论

2 个回答

rtos40

Use MicroLIB 和 #pragma import(__use_no_semihosting)  只能使用一种 需要将 Use MicroLIB  点掉  或者注释 #pragma import(__use_no_semihosting)  

attachments-2021-10-DMevGQsz616195124faf6.png

attachments-2021-10-z9nLjZ3Y616195217f6f1.png其中你 int fgetc(FILE *f)中有问题

需要将等待串口标志位 USART_FLAG_RXNE 

--------------------------------------------------------------------------------------

仿真时scanf  在虚拟的UART中输入,在仿真情况下 按下面尝试下

点击attachments-2021-10-bywTmzVW6161963c541c5.png

后出现

attachments-2021-10-1IEYV2R06161965ccec2a.png

点击这空白地方就可以在这里输入了,这个窗口没有回显功能,需要自己实现 

附件为修改成功的看下是否是你想要的效果 07_link_list.rar




请先 登录 后评论
百问网-黄老师
擅长:嵌入式开发

在仿真模式下,scanf应该无法输入

请先 登录 后评论
  • 2 关注
  • 0 收藏,272 浏览
  • 梁秋晨 提出于 2021-10-07 11:48

相似问题