先楫SDK学习笔记

  1. CMAKE学习

B站视频学习:CMake管理工程-上_哔哩哔哩_bilibili

CMAKE函数:SDK CMake API Reference — HPMico Software Development Kit 文档

  • add_subdirectory:文件夹管理
  • sdk_app_inc:添加头文件搜索路径
  • sdk_app_src:添加源文件
  • sdk_app_src_glob:以正则表达式方式添加源文件(*.c 直接选择所有源文件)
  • sdk_compile_definitions:添加宏定义(-DUSE_MATH=1 :添加宏定义USE_MATH=1)  
  • sdk_compile_options:添加编译选项("-O3"开启优化等级3)
  • sdk_ld_options:添加链接选项("-lm" 防止函数与头文件链接不上)
  • sdk_link_libraries:添加库文件(添加自己生成的.a 或 .dll库  在IDE的设置 project - Linker -Additional Input Files能看到)
  • sdk_linker_global_symbols:添加链接使用的全局变量
  • sdk_raise_fatal_error_if_all_invaild:检查配置规则(FEATUREA  必须打开FEATUREA,否则报错)
  • sdk_ses_compile_options:设置目标芯片架构(在IDE的设置 project - Code Generation -RISC-V 能看到)
  • sdk_ses_options:预设SES配置(先在SES配置,再用记事本打开SES的项目文件,查看要配置项目的关键字是什么,通过加关键字进行修改)

#"$(OBJDUMP)" -S -d "$(OutDir)/demo$(EXE)" > "$(OutDir)/demo.asm" && "$(OBJCOPY)" -O ihex "$OutDir/demo$(EXE)" "$(OutDir)/demo.hex"         生成hex文件指令,加在IDE 的project -User Build Step -Post Build Command中

  • set(FEATUREA ON):打开宏定义FEATUREA 

  • # 表示注释
  • .yaml 文件里能看到每个板子的存储大小
  • .icf 文件看空间地址分配

  1. Pinmux学习笔记
  • 外设边上可以调整颜色
  • Function可以根据外设生成引脚初始化函数
  • 可以导出csv文件

  1. SDK GUI

视频地址:Level 1 Lesson---基础外设_哔哩哔哩_bilibili

双image启动_哔哩哔哩_bilibili

  • Launch GDB Server:启动GDB调试功能
  • Program Flash:下载程序到flash
  • Localize SDK for App:代码本地化(用到的所有文件复制到文件目录下)
  • GCC Compile:GCC编译

  • 建项目流程,代码本地化(修改cmake,将文件独立)
    • 新建项目文件夹,文件夹下新建一个board和project
    • board放入sdk里的板子hpm6e00,里面的yaml文件也修改,再加入hpm6e00evk.cfg文件(文件名需要统一修改);project放入相近的例程hello_world
    • 打开GUI,选中所用的板子和例程,路径选择项目文件夹,点击生成
    • 在CMAKEList(例程文件夹下)中添加JLINK调试选项 sdk_ses_opt_debug_connection(J-Link)
    • 点击代码本地化,生成
    • 修改项目设置 GDB Server的绝对路径为相对路径
    • 创建完成,可以随意更换路径

  1. 双核学习笔记
  • 文章地址:玩转MCU双核(上) 先楫HPM6000系列双核怎么玩?答案超乎你想象!-技术文章-先楫半导体
  • multicore_release_cpu();        //释放core1指令函数,让core1启动
  • sec_core_img.c:core1镜像文件存储位置(编译后将core1的bin文件存入该文件的数组中)
  • 使用双核时,注意通用数据不建议放在cache区,可能导致数据异常,或者访问前后强制刷新cache;通用数据可以放在noncache区,使用noncache区需要初始化PMP
  • 建议基于SDK的双核例程去修改,不建议手搓双核;
  • core1的项目配置中 User Build Step --Post Build Command放了控制core1 bin文件的指令
D:/APP_Download/HPMicro/sdk_env_v1.7.0/tools/python3/python3.exe
../../../../../../scripts/bin2c.py 
$(OutDir)/demo.bin 
sec_core_img >
D:/APP_Download/HPMicro/sdk_env_v1.7.0/hpm_sdk/samples/multicore/mbx/core1/../src/sec_core_img.c 
&& 
"$(OBJDUMP)" -S -d "$(OutDir)/demo$(EXE)" > "$(OutDir)/demo.asm"

执行Python指令将bin文件放入core0文件的sec_core_img数组中

  • 建双核流程
    • 放两个core0的例程到同一个文件夹,加入multicore/common文件夹,multicore/mbx/src/sec_core_img.c文件加入core0的例程.c文件下(同时修改cmake文件)
    • 生成core1项目,在core1的项目配置添加User Build Step --Post Build Command指令
    • 添加宏定义 RUNNING_CORE = HPM_CORE1
    • 生成core0项目,将mbx所需要的文件和函数都加进去
    • 将core1的icf文件改为ram_core1(在project -- Linker -- Linker Script File中)
    • core1的Debugger的Target Device改成CPU1,GDB Server的port由3333改成3334
    • core1修改Code Generation的RISC-V ISA为rv32imac
  • 在board.c中,需要区分好每个core所用的外设,防止外设冲突或core休眠关闭时钟

  1. Cache学习笔记

视频地址:CACHE介绍及使用_哔哩哔哩_bilibili

  • cache解决CPU运算速度(816M)与内存读写速度(133M)不匹配问题(预加载和临时缓存)
  • 缓存最小单位为cache line,HPM6000系列是64byte;PMA设置地址需要对齐该字节数
  • Dirty:cache line的数据与Memory不一致
  • Invalidate:将地址范围的数据失效,让CPU直接从Memory读取数据
  • Write-back:将cache内dirty的数据写入Memory,让数据保持一致
  • Non-cacheable:数据不走缓存
  • L1Cache(l1c):
    • l1c_dc_enable():打开cache
    • l1c_dc_writeback():cache数据更新到Memory
  • hpm_common.h中,ATTR_PLACE_AT_NONCACHEABLE 有宏定义,将数据放入noncacheable区域  uint8_t ATTR_PLACE_AT_NONCACHEABLE temp;

ROM API学习

  • rom_xpi_nor_auto_config():根据提供的flash配置字自动配置XPI接口
  • rom_xpi_nor_get_property():获取nor flash属性
  • rom_xpi_nor_erase():擦除flash
  • rom_xpi_nor_read():读取flash
  • rom_xpi_nor_program():写入flash
  • read_from_shadow():读取OTP影子寄存器的值
  • read_from_ip():读取OTP的值
  • program():对OTP值进行烧写(不建议使用,只有一次修改机会)
  • rom_enter_bootloader():在APP中进入BootLoader程序
  • board.c中,最开始位置写着对NOR FLASH的配置选项

  1. 先楫工具:
  • HPMicro Program:好像需要在BootLoader模式下连接
    • 镜像烧写
    • 读取MCU OTP值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值