繁体   English   中英

如何获得指定架构(x86,pic控制器)中的芯片名称和可寻址内存?

[英]How to get the chip name and the addressable memory in the specified architectures (x86, pic controller)?

如何在没有BIOS的情况下获取指定架构(x86,x64,pic控制器)中的芯片名称和可寻址内存? 您是否有特定的寄存器来存储可用的内存大小?

不知道这是多么的讨人喜欢,但这可能会帮助您指出正确的方向。

将PicBasic与PicAxe单片机(而非PIC单片机)一起使用时,在编程语言中有一个关键字/语句称为“ READSILICON”

并且此READSILICON操作将读取硅片的未指定区域,并返回一个值,该值又用于/已用于识别MCU。

因此,也许在您的开发IDE中有类似的功能?

注意:由于这是一个新功能,因此只有较新的mcu支持它,而较旧的mcu显然不支持。

在x86中,可以使用CPUID指令检索芯片名称。 Wikipedia上有关CPUID的文章提供了有关如何查询处理器品牌名称字符串的示例代码。

有关CPUID的主要参考,请参阅英特尔的应用笔记 ,在撰写本文时,品牌字符串标识为7.2节。

在GCC内联汇编中,您可以执行以下操作:

unsigned int cpuid = 0x80000000;

__asm__ __volatile__("cpuid\n\t" : "+a" (cpuid));
if (cpuid >= 0x80000004) { // brand name query supported
    union { char brandstr[48]; unsigned int i[12] } i;
    __asm__ ("cpuid\n\t"
        : "=a"(i.i[0]), "=b" (i.i[1]), "=c"(i.i[2]), "=d"(i.i[3])
        : "a"(0x80000002));
    __asm__ ("cpuid\n\t"
        : "=a"(i.i[4]), "=b" (i.i[5]), "=c"(i.i[6]), "=d"(i.i[7])
        : "a"(0x80000003));
    __asm__ ("cpuid\n\t"
        : "=a"(i.i[8]), "=b" (i.i[9]), "=c"(i.i[10]), "=d"(i.i[11])
        : "a"(0x80000004));
    printf ("This CPU brand name is: %48s\n", i.brandstr);
} else {
    printf ("This x86 CPU doesn't support brand name queries\n");
}

在x86机器上没有 BIOS的情况下确定内存布局/大小几乎是不可能的,因为直接在硬件上执行此操作的大部分方式都是特定于CPU /芯片组组合的,并且供应商的开发指南(BKCD-BIOS和内核开发人员指南)通常仅在公共版本(不需要NDA)中提供有关此内容的部分参考。 记录的方法是查询ACPI BIOS以获得此信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM