keil5新建文件没有芯片,要如何解决?(语言-c语言)

卸载了好几次重装都还是一样 ,芯片包也下载过了,图标一直是灰色,新建不了工程 ,该如何解决?

img

芯片包下载后,安装了吗?

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7788300
  • 这篇博客你也可以参考下:纯C语言设计的线程,让单片机不用操作系统的情况下,支持线程和事件
  • 除此之外, 这篇博客: C语言数组在内存中是怎样表示的?中的 1、数组与栈区 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 先来看一段极其简单的代码:

    我们定义了一个局部变量arr作为int类型的数组,然后分别将100-600写到了数组中。那么,数组arr在内存中是怎样表示的呢?

    首先,我们编译一下:

    注意,-fno-stack-protector选项是为了禁止堆栈保护,让汇编更容易懂些,关于堆栈保护这个话题可以参考这篇文章《黑客攻防:缓冲区溢出攻击与堆栈保护》。

    好啦,一切准备就绪,可以庖丁解牛啦,使用的刀就是gdb,代码面前了无秘密,gdb面前程序的运行时(run time)了无秘密。

    用gdb来调试刚刚编译出来的程序,这里看一下arr_on_stack函数的汇编指令:

    我们在之前的文章多次提到过,每个函数在运行起来后都有属于自己的栈帧,栈帧组成栈区,此时arr_on_stack这个函数的栈区在哪里呢?答案就在寄存器rbp中。

    我们来看一下rbp寄存器指向了哪里?

     啊哈,原来栈帧在0x7ffffffee2a0这个地方,那么我们的数组arr在哪里呢?别着急,这条指令会告诉我们答案:

     这行指令的含义是说把100(0x64)放到rbp寄存器减去0x20的地方,显然,这就是数组的开头,让我们来计算一下rbp寄存器减去0x20:

    因此,我们预测arr应该在0x7ffffffee280这个位置上。

    接下来,我们用gdb验证一下:

     哈哈,怎么样,是不是和我们猜想的一样,数组arr的确就放在了0x7ffffffee280这个位置,是这样存储的:

     这就是C语言中所谓的数组了,无非就是从0x7ffffffee280 到 0x7ffffffee298这一段内存嘛,数组在栈区就是这么表示的!

  • 您还可以看一下 李飞老师的C语言开发之数据结构与算法二课程中的 树的插入、查找操作小节, 巩固相关知识点

51不选芯片也无所谓。