BIOS MCSDK 2.0 学习笔记(二)————使用Platform Library创建工程

Platform Library提供了一组适用于开发板的API函数。我们可以使用它来快速入手开发板。

  1. 启动CCS,建立一个空的工程
  2. 添加include路径:"C:\Program Files\Texas Instruments\pdk_C####_1_0_0_xx\packages",添加后如下图所示:
  3. 添加下列链接库到C6000 Linker section中的File Search Path:
    1. "C:\ti\pdk_c667x_2_0_3\packages\ti\platform\evmc6678l\platform_lib\lib\debug\ti.platform.evm6678l.ae66"
    2. "C:\ti\pdk_c667x_2_0_3\packages\ti\csl\lib\c6678\c66\release\ti.csl.ae66"
    3. "C:\ti\pdk_c667x_2_0_3\packages\ti\csl\lib\c6678\c66\release\ti.csl.intc.ae66"
  4. 指定库的查找路径:
    1. "C:\ti\pdk_c667x_2_0_3\packages\ti\csl\lib\c6678\c66\release"
    2. "C:\ti\pdk_c667x_2_0_3\packages\ti\platform\evmc6678l\platform_lib\lib\debug"
  5. 打开Project->Properties,在Build->C6000 Compiler->Advanced Options->Predefined Symbol中添加SOC_C6678
  6. 编写代码,这里给MCSDK中的led_play.c的代码,注意:代码中的OSAL functions for Platform Library不要注释掉!(Osal_platformMalloc等这些函数在platform_lib中的platform.c 中有使用,但是lib工程中没有其实现,所以可以在工程中实现。否则在linker的时候会提示函数未定义,也可以将实现与声明均放在lib中编译生成lib。)
    #include <cerrno>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "ti\platform\platform.h"
    #include "ti\platform\resource_mgr.h"
     
    /* OSAL functions for Platform Library */
    uint8_t *Osal_platformMalloc (uint32_t num_bytes, uint32_t alignment)
    {
        return malloc(num_bytes);
    }
     
    void Osal_platformFree (uint8_t *dataPtr, uint32_t num_bytes)
    {
        /* Free up the memory */
        if (dataPtr)
        {
            free(dataPtr);
        }
    }
     
    void Osal_platformSpiCsEnter(void)
    {
        /* Get the hardware semaphore.
         *
         * Acquire Multi core CPPI synchronization lock
         */
        while ((CSL_semAcquireDirect (PLATFORM_SPI_HW_SEM)) == 0);
     
        return;
    }
     
    void Osal_platformSpiCsExit (void)
    {
        /* Release the hardware semaphore
         *
         * Release multi-core lock.
         */
        CSL_semReleaseSemaphore (PLATFORM_SPI_HW_SEM);
     
        return;
    }
     
    void main(void) {
        platform_init_flags init_flags;
        platform_init_config init_config;
        platform_info p_info;
        uint32_t led_no = 0;
        char message[] = "\r\nHello World.....\r\n";
        uint32_t length = strlen((char *)message);
        uint32_t i;
     
        /* Initialize platform with default values */
        memset(&init_flags, 0x01, sizeof(platform_init_flags));
        memset(&init_config, 0, sizeof(platform_init_config));
        if (platform_init(&init_flags, &init_config) != Platform_EOK) {
            return;
        }
     
        platform_uart_init();
        platform_uart_set_baudrate(115200);
     
        platform_get_info(&p_info);
     
        /* Write to the UART */
        for (i = 0; i < length; i++) {
            if (platform_uart_write(message[i]) != Platform_EOK) {
                return;
            }
        }
     
        /* Play forever */
        while(1) {
            platform_led(led_no, PLATFORM_LED_ON, PLATFORM_USER_LED_CLASS);
            platform_delay(30000);
            platform_led(led_no, PLATFORM_LED_OFF, PLATFORM_USER_LED_CLASS);
            led_no = (++led_no) % p_info.led[PLATFORM_USER_LED_CLASS].count;
        }
    }
  7. 添加linker command script。The linker command script defines the memory map for the platform (where internal, shared and external memory start, etc.) and where we want our code and data sections to be placed. We are going to put them in the shared memory region on the processor.
    1. Select File->New->File from Template, enter File Name as XXXX.cmd and hit Finish.
    2. paste following linker command file in the editor
      -c
      -heap  0x41000
      -stack 0xa000
       
      /* Memory Map */
      MEMORY
      {
          L1PSRAM (RWX)  : org = 0x0E00000, len = 0x7FFF
          L1DSRAM (RWX)  : org = 0x0F00000, len = 0x7FFF
          L2SRAM (RWX)   : org = 0x0800000, len = 0x080000
          MSMCSRAM (RWX) : org = 0xc000000, len = 0x200000
          DDR3 (RWX)     : org = 0x80000000,len = 0x10000000
      }
       
      SECTIONS
      {
          .csl_vect    >       MSMCSRAM
          .text        >       MSMCSRAM
          GROUP (NEAR_DP)
          {
              .neardata
              .rodata
              .bss
          } load       >      MSMCSRAM
          .stack       >      MSMCSRAM
          .cinit       >      MSMCSRAM
          .cio         >      MSMCSRAM
          .const       >      MSMCSRAM
          .data        >      MSMCSRAM
          .switch      >      MSMCSRAM
          .sysmem      >      MSMCSRAM
          .far         >      MSMCSRAM
          .testMem     >      MSMCSRAM
          .fardata     >      MSMCSRAM
          platform_lib > 	MSMCSRAM
      }
  8. 编译。。。
时间: 2024-08-01 15:00:42

BIOS MCSDK 2.0 学习笔记(二)————使用Platform Library创建工程的相关文章

BIOS MCSDK 2.0 学习笔记(一)

MCSDK简介 BIOS MCSDK是为TI的高性能多核DSP提供的一套组件,包括: SYS/BIOS实时操作系统 Chip support libraries, drivers, and basic platform utilities Run-time libraries (OpenMP, OpenEM) Interprocessor communication for communication across cores and devices Basic networking stack

一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.supervisor.mysql环境搭建搭建好了.net core linux的相关环境,今天就来说说ef core相关的配置及迁移: 简介: Entity Framework(以下简称EF) 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,EF Core是Entity

Caliburn.Micro学习笔记(二)----Actions

Caliburn.Micro学习笔记(二)----Actions 上一篇已经简单说了一下引导类和简单的控件绑定 我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧 今天说一下它的Actions,看一下Caliburn.Micro给我们提供了多强大的支持 我们还是从做例子开始 demo的源码下载在文章的最后 例子1.无参数方法调用 点击button把textBox输入的文本弹出来 如果textbox里没有文本button不可点,看一下效果图 看一下前台代码 <Stac

2. 蛤蟆Python脚本学习笔记二基本命令畅玩

2. 蛤蟆Python脚本学习笔记二基本命令畅玩 本篇名言:"成功源于发现细节,没有细节就没有机遇,留心细节意味着创造机遇.一件司空见惯的小事或许就可能是打开机遇宝库的钥匙!" 下班回家,咱先来看下一些常用的基本命令. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/48092873 1.  数字和表达式 看下图1一就能说明很多问题: 加法,整除,浮点除,取模,幂乘方等.是不是很直接也很粗暴. 关于上限,蛤蟆不太清楚

小猪的数据结构学习笔记(二)

小猪的数据结构学习笔记(二) 线性表中的顺序表 本节引言: 在上个章节中,我们对数据结构与算法的相关概念进行了了解,知道数据结构的 逻辑结构与物理结构的区别,算法的特性以及设计要求;还学了如何去衡量一个算法 的好坏,以及时间复杂度的计算!在本节中我们将接触第一个数据结构--线性表; 而线性表有两种表现形式,分别是顺序表和链表;学好这一章很重要,是学习后面的基石; 这一节我们会重点学习下顺序表,在这里给大家一个忠告,学编程切忌眼高手低,看懂不代表自己 写得出来,给出的实现代码,自己要理解思路,自己

JavaScript--基于对象的脚本语言学习笔记(二)

第二部分:DOM编程 1.文档象模型(DOM)提供了访问结构化文档的一种方式,很多语言自己的DOM解析器. DOM解析器就是完成结构化文档和DOM树之间的转换关系. DOM解析器解析结构化文档:将磁盘上的结构化文档转换成内存中的DOM树 从DOM树输出结构化文档:将内存中的DOM树转换成磁盘上的结构化文档 2.DOM模型扩展了HTML元素,为几乎所有的HTML元素都新增了innerHTML属性,该属性代表该元素的"内容",即返回的某个元素的开始标签.结束标签之间的字符串内容(不包含其它

【Unity 3D】学习笔记二十八:unity工具类

unity为开发者提供了很多方便开发的工具,他们都是由系统封装的一些功能和方法.比如说:实现时间的time类,获取随机数的Random.Range( )方法等等. 时间类 time类,主要用来获取当前的系统时间. using UnityEngine; using System.Collections; public class Script_04_13 : MonoBehaviour { void OnGUI() { GUILayout.Label("当前游戏时间:" + Time.t

angular学习笔记(二十八)-$http(6)-使用ngResource模块构建RESTful架构

ngResource模块是angular专门为RESTful架构而设计的一个模块,它提供了'$resource'模块,$resource模块是基于$http的一个封装.下面来看看它的详细用法 1.引入angular-resource.min.js文件 2.在模块中依赖ngResourece,在服务中注入$resource var HttpREST = angular.module('HttpREST',['ngResource']); HttpREST.factory('cardResource

Swift学习笔记(二)参数类型

关于参数类型,在以前的编程过程中,很多时间都忽视了形参与实参的区别.通过这两天的学习,算是捡回了漏掉的知识. 在swift中,参数有形参和实参之分,形参即只能在函数内部调用的参数,默认是不能修改的,如果想要修改就需要在参数前添加var声明. 但这样的声明过后,仍旧不会改变实参的值,这样就要用到inout了,传递给inout的参数类型必须是var类型的,不能是let类型或者字面类型,(字面类型是在swift中常提的一个术语,个人认为就是赋值语句,也不能修改)而且在传递过程中,要用传值符号"&