8-bit Knowledge Base

    Publish
     
      • How to import multiple MCU projects into Simplicity Studio™

        Stephen | 11/322/2015 | 07:22 PM

        Question

        How do I import multiple MCU projects into Simplicity Studio™?

        Answer

        1. In the Simplicity IDE, press Control + 3
        2. Type Import (Multiple MCU Projects) - Import.
        3. Under Scanned Locations, navigate to your project.
        4. Under Filtering, check the project file type (eg Silicon Labs Legacy IDE).
        5. Click Next.
        6. Check the box next to your project.
        7. Select Import Mode.
        8. Click Next.
        9. Select the correct Kit or Part.
        10. Click Finish.
        11. Then, manually add all include paths to:
        - Right click your project > Properties > C/C++ Build > Settings
        - Tool Settings tab > Keil 8051 Compiler > Includes
        - Add "${workspace_loc:/${ProjName}/Header Files/}"

      • 如何创建和链接一个静态库文件

        Jiehui | 11/316/2015 | 06:10 AM

        静态库文件包含可以被工程调用和链接的代码,它可以用于提供可重复使用的函数或以二进制代码形式(还需一个头文件)发布代码。

         

        在Simplicity Studio 中创建一个静态库,通过File -> New -> Silicon Labs MCU Project 并选择 Library: 

        lib1.png

         

        接着写下任何你想包含在这库文件中的函数。库函数可以被其它库函数调用。务必创建一个包含这些你想要被调用的函数原型的头文件。这库文件中不能含有main()函数,然后编译该工程。

        lib2.png

         

        再创建一个新工程以链接到这个库(也可以使用现有的工程)。

        lib3.png

         

        在这工程中,添加包含库头文件的目录到包含路径,这可以通过 Properties -> C/C++ Build -> Settings -> Tool Settings -> Compiler -> Includes -> Add directory实现。

        lib4.png

         

        添加库文件.lib到链接器,Properties -> C/C++ Build -> Settings -> Tool Settings -> Linker -> Libraries -> Add。之前必须先编译库文件工程才能产生.lib文件。

        original.png

         

        添加#include头文件名到工程中。至此,便可以调用库文件中的函数了。

        lib5.png

      • 输出由Keil PK51编译的工程的内存使用情况总结

        Jiehui | 11/316/2015 | 06:10 AM

        当使用Keil LX51链接器编译一个工程时,链接器会输出一个.m51的map文件,该map文件显示了工程的函数和模块在内存的使用情况,如下图。

         

        map.png

         

        为了帮助优化8051程序,用户可以在编译8051工程后运行附件的 Python 脚本 summarize.py 显示更多的内存使用信息。

         

        py.png

         

        该脚本在当前工作目录下搜索第一个.m51文件,并解析map文件通过模块(源文件)统计内存使用情况。

        使用步骤:

        1. 下载附件 summarize.zip 并解压 summarize.py 到工程的Debug和Release编译文件夹。

        2. 安装 Python 2.7 或 3.3

        3. 在工程的编译配置的 Post-build steps中,添加以下命令运行脚本:

        python summarize.py

         

        如果系统PATH变量没有包含python.exe的路径,则上面命令行必须包含python.exe可执行文件的完整路径以替换"python"

          

        更多关于Simplicity IDE Post-build steps,请查看下面文章:

        为Simplicity IDE添加post build step

      • 如何在Simplicity IDE中创建汇编工程

        Jiehui | 11/316/2015 | 06:09 AM

        问题

        如何在Simplicity IDE中创建汇编工程? 

        答案

        1: Simplicity IDE 中选择 File > New > Silicon Labs MCU Project

         

        2: 建议选择一个 SDK,这样无须手动添加包含的头文件到工程中,因为包含的头文件是 SDK 的一部分。

         

        3: 对于项目类型,选择空白的C项目(尽管我们将要写汇编代码)。

         

        4: Link to sources Link libraries and copy sources Copy contents  In-place

        在使用现有例程时,这些选项是有相关意义的。现有的例程位于 SDK 目录下。而基于Eclipse Simplicity IDE 有本地的 “workspace” 工作目录,用户可以选择导入例程的一份拷贝到此目录,这样就不会编辑到位于 SDK 安装目录下的例程原始文件。

        Link to sources - workspace 中创建IDE项目文件(.project and .cproject),链接到源文件,不复制源文件到 workspace 目录,对源文件的任何编辑都将直接作用在 SDK 路径下的源文件。

        Link libraries and copy sourcesworkspace 中创建IDE项目文件(.project and .cproject),不复制库文件,只复制源文件到workspace 目录。对源文件的任何编辑仅局限于workspace 目录下。

        Copy contentsworkspace 中创建IDE项目文件(.project and .cproject),复制库文件和源文件,对文件的任何编辑仅局限于workspace 目录下。

        In-place在源文件所在目录(非 workspace 工作空间目录)创建IDE项目文件(.project and .cproject)。所有源文件没有被复制到 workspace 中。

         

        提示: 在项目浏览窗口,任何时候在一个被链接的文件夹或文件旁边都可以看到一个快捷链接(正如Windows系统中的快捷链接)的箭头图标。

        当创建一个空白的工程时,通常在 workspace 目录中保留源文件。因此,我们建议使用 "Link libraries and copy sources"

         

        5. 在编译配置中仅选择 Keil 编译工具

         

        6. 点击Finish后,应该能够看到新建一个带有.c .A51文件的工程。由于要用汇编语言编程,这些不需要的文件可以从文件系统中删除。

         

        7. 新建一个.asm 后缀名的文件,并编译。如果第一步中选择 EFM8SB1 器件,附件有一个用汇编写的 blinky 实例供测试。

         

        提示:当启动调试会话框调试一个汇编工程时,Simplicity IDE将不会自动暂停 MCU。需要在 Debug 窗口中先点击 .omf 文件,再执行 Run > Suspend 或点击工具栏的暂停按钮以暂停 MCU

      • 定位存储器中C程序变量

        Jiehui | 11/316/2015 | 06:08 AM

        问题

        使用 Keil C 编译器,该如何定位变量在一个特定的存储段或在某个存储地址?

        答案

        Keil C 编译器使用 C 扩展 DATA,IDATA,BDATA, XDATA,PDATA 和 CODE 定义 8051 存储段以及特定变量的寻址方式。定位一个变量在存储段中的绝对地址可以使用 _at_ 关键字。

      • 在 IAR Embedded Workbench 中创建 C8051 微控制器工程

        Jiehui | 11/316/2015 | 06:08 AM

        本指南将逐步介绍如何创建和配置一个C8051微控制器工程。这里以C8051F930微控制器以及 Silicon Labs IDE 和 Simplicity Studio 开发环境自带的 F93x_Blinky例子为例。

         

        1. 首先,通过菜单 Project -> Create New Project...  创建一个新工程

         

        iar_1.png

         

        2. 选择 8051 作为工具链,以及 C 工程作为工程模板。

        iar_2.png

         

        3. 添加工程源文件。这里从Silicon Labs IDE 安装目录下的 \Example 文件夹中找到 F93x_Blinky实例 - 默认的路径是 C:\Silabs\MCU\Examples\C8051F93x_92x\Blinky。

        iar_3.png

         

        4. 指定编译器到正确的包含目录。通过工程选项窗口,可以通过Workspace窗口中的首个高亮的基本工程,右键选择 Options...访问,或者使用 ALT+F7。在我的这例子中,compiler_defs.h和C8051F930_defs.h文件都是在C:\Silabs\MCU_2\INC 目录下找到,因此我添加该目录到包含路径中。

        iar_4.png

         

        6. 配置调试工具。在相同的 Options 窗口,导航到 Debugger 页,然后选择“Silabs”驱动。

        IAR_6.png 

         

        7. 还需另外配置Silabs页。如果使用一个USB调试器,“USB interface” 和“SiLabs 2-wire (C2) Interface”必须被选中。如果由该调试器供电给MCU器件,“Continuously power target”也必须被选中。另外,闪存页的容量必须设置与MCU相符合。对于 C8051F93x系列,闪存的页容量是1024个字节。对于该值,具体请查看MCU数据手册中 Flash Memory 部分的介绍。

        iar_5.png

         

        8. 整个工程的配置应该完成。选择“Download and Debug”应该能够成功编译和下载该工程到连接的MCU上。

        iar_6.png

      • 在 Simplicity Studio 中用 Keil C51 产生内联汇编代码

        Jiehui | 11/316/2015 | 06:08 AM

        问题

        在 Simplicity Studio 中有可能编译包含内联汇编代码的 C文件吗?

        答案

        是的,这可以通过以下步骤来实现:

         

        1. 使用 #pragam asm 添加内联汇编代码

        详情请参阅:C51: Getting Inline Assembly to Work

         

        c_asm_1.png

         

        2. 编译 C 文件产生汇编代码

        这可以通过对该 C 文件编译属性添加 SRC 指令来实现。在工程浏览器中右键点击该 C 文件,并选择属性(Properties),然后在编译器配置的额外标志域处添加“SRC”。

        c_asm_2.png

         

        做完上面这一步,编译工程。编译器就产生 .SRC 文件,同时报告一个错误 - 这是因为链接器现在缺省我们所编辑的 .c 文件所对应的.OBJ文件,因为我们只告知编译器产生一个.SRC文件而非忽略该错误。产生的 SRC 文件应该包含该 C 文件的汇编代码加上我们已经添加的内联的汇编指令。

         

        c_asm_3.png

         

        3. 不编译原有.c文件

        这将会移除之前的错误。在工程浏览器中右键点击该文件,并选择Resource Configurations -> Exclude from Build...

         

        c_asm_4.png

         

        4.添加 SRC 文件到 Simplicity Studio中作为源文件编译

        默认情况下 .SRC不被识别为源文件,因此必须手动添加。点击菜单Window -> Preferences -> C/C++ -> File types。如下图,添加“.SRC”文件作为汇编源文件。

        c_asm_5.png

         

        5. 必要情况下可以添加 C51实时库文件

        如果你的工程中仅有汇编文件,C51库文件将不会自动被包含一起编译。可能是C51S.LIB、C51C.LIB 或 C51L.LIB,取决于存储器模型的选择(Small、Compact 或 Large)。这些可以在Keil安装目录下 C51\LIB 中找到。

        c_asm_6.png

         

        6. 编译工程

        现在 Studio将编译.SRC源文件以及其它添加的汇编文件。至此,你也可以直接修改这.SRC文件,或者修改原.c文件再重复以上这些步骤产生.SRC文件。

      • 验证闪存锁定区域边界

        Jiehui | 11/316/2015 | 06:07 AM

        症状

        从一个闪存被锁定的器件读取闪存数据时,锁存边界可能显示不正确(应该可以访问的闪存空间可能表现为被锁定状态)。该怎么办?

        诊断

        这是由调试适配器读取闪存数据的方式导致的。

         

        我们假设有一个闪存空间从 0x0000 到 0x0FFF 的器件,前两页空间(0x0000-0x07FF)被锁定。当读取整个闪存时,我们期望看到闪存空间从 0x0000-0x07FF 应该是全0,对于 0x0800-0x0FFF空间是有效数据。

         

        但是,对于读回的数据,我们可能发现从0x0000-0x0806空间是不可读的。因为调试适配器是按块来读取闪存数据,如果模块中的任一字节是被锁定的,那么整个块的读操作都将失败的。而所有读失败的字节将被视为被锁定。在我们的实验中,调试适配器按块读取块地址从 0x07E6-0x0806,当读取失败时,IDE便假定在这块中的所有字节都是被锁定的。

         

        同样的事情可能发生在高锁定字节。如果闪存最后一页被锁,可能会出现不仅只有一页被锁定。

         

        多数情况下,适配器是以页对齐的块为单位读取数据,就不会看到这种现象。但是,有时适配器读取跨越一个锁定边界,则就会看到这种不正确的行为。

         

        这种行为在 C8051F5xx 器件上得到验证,可能也会出现在其它器件上。

        解答

        请不要请求读取跨越闪存锁定边界的数据。可以分开先读取被锁定部分,再读取没被锁定部分,而非一次性读取闪存全部数据。这将可以看到被锁闪存的真实边界。

      • 该如何产生适用于Production Programmer的基于Bank的Hex文件?

        Jiehui | 11/316/2015 | 06:06 AM

        问题

        该如何产生适用于Production Programmer的基于Bank的Hex文件?

        答案

        有两种可能的办法可以产生适用于Silicon Labs Production Programmer的基于Bank的Hex文件。

         

        方法一,使用OC51将所编译对象以Bank为单位进行细分,然后用 OH51对每个Bank各自生成一个Hex文件。

        OC51

        OH51

         

        方法二,用 OH51产生一个Hex文件,然后用srecord再细分。使用该办法,--crop过滤选项必须使用以滤除不在Bank中的数据,同时, --offset过滤选项也必须用于搬移数据到期望位置。Bank 0应该位于0x0000,而其它所有Banks应该位于0x8000。

        OH51

        srecord

         

        了解更多关于开发环境中用到代码分页的信息,请参阅AN130

        http://www.silabs.com/products/mcu/Pages/ApplicationNotes.aspx

         

        请注意,Keil OHX51不支持分区代码, 下面链接页面中最后一个例子是不正确的。

        http://www.keil.com/support/docs/2349.htm

      • 如何找到EFM8的原理图,材料清单和装配文件

        Siliconlabs | 11/309/2015 | 05:52 AM

        Question

        在哪里可以找到EFM8入门套件的原理图,材料清单和装配文件

         

        Answer

        你可以在Simplicity Studio的主界面上获得所有EFM8 STK的套件文档。如下图所示,点击Kit Documentation

        kitdocs1.png

         

        Kit Documentation 对话框会弹出。输入EFM8进行搜索。一个关于EFM8的列表会出现,并伴有组装图,材料清单,原理图,用户指南,快速入门指南等套件相关文档。

        kitdocs3.png

        接下来你可以双击你所需要的文档。