五、从0开始卷出一个新项目瑞萨RZN2L之RZT2L BaseProject coremark的移植

感谢来自b站热心帅气的同学分享的RZT2L移植经验总结的md文档
1 需要注意的小点
    1.1 使用Flash运行调试前,新板子需要erase
    1.2 在线debug,需要修改startup.c
2 coremark工程建立
    2.1 工程创建
    2.2 src 用户c代码移植
    2.3 debug调试
    2.4 修改printf 重定向
    2.5 修改编译等级
    2.6 修改 迭代次数
    2.7 修改ld文件和system.c
3 小结
    3.1 clock_t编译报错问题
    3.2 移植coremark的目的个人理解
    3.3 尝试FSP V1.30

五、从0开始卷出一个新项目瑞萨RZN2L之RZT2L BaseProject coremark的移植

参照【四、从0开始卷出一个新项目之瑞萨RZN2L软件基础工程构建】 https://www.bilibili.com/video/BV1cQ4y1p7of/?share_source=copy_web&vd_source=0b6b29722ed1b9adf9a9fa82857ec3a0

1 需要注意的小点

1.1 使用Flash运行调试前,新板子需要erase

图片

参照Getting Started with Flexible Software Package手册的附录,下载Jlink, 按着手册进行芯片擦除

1.2 在线debug,需要修改startup.c

参照Getting Started with Flexible Software Package手册的附录,在线debug,还需在starup.c添加 #if 1 // Software loops are only needed when debugging.的代码,如下图所示。

图片

FSP 版本1.2和1.3生成的starup.c有所区别

2 coremark工程建立

使用开发套件自带配件:Jlink-Ob debug调试:J19 State: open,typeC-usb 电脑供电,USB串口线
使用FSPV1.2进行工程配置

2.1 工程创建

可以看视频创建流程,大致差不多,稍微有一点区别,可以参照一下下面的图。

最小工程-闪灯程序--hello world !for 开发板

图片


RSK FOR RZT2L : 挂载xspi1

图片


选择 SPI1 x1 boot mode

图片


改成800M

图片


定时器配置

图片


串口配置

图片

2.2 src 用户c代码移植

把coremark和下面的hal_entry.c 代码复制到src文件下
hal_entry.c

/***********************************************************************************************************************

  • Copyright [2020-2022] Renesas Electronics Corporation and/or its affiliates. All Rights Reserved.

  • This software and documentation are supplied by Renesas Electronics Corporation and/or its affiliates and may only

  • be used with products of Renesas Electronics Corp. and its affiliates ("Renesas"). No other uses are authorized.

  • Renesas products are sold pursuant to Renesas terms and conditions of sale. Purchasers are solely responsible for

  • the selection and use of Renesas products and Renesas assumes no liability. No license, express or implied, to any

  • intellectual property right is granted by Renesas. This software is protected under all applicable laws, including

  • copyright laws. Renesas reserves the right to change or discontinue this software and/or this documentation.

  • THE SOFTWARE AND DOCUMENTATION IS DELIVERED TO YOU "AS IS," AND RENESAS MAKES NO REPRESENTATIONS OR WARRANTIES, AND

  • TO THE FULLEST EXTENT PERMISSIBLE UNDER APPLICABLE LAW, DISCLAIMS ALL WARRANTIES, WHETHER EXPLICITLY OR IMPLICITLY,

  • INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT, WITH RESPECT TO THE

  • SOFTWARE OR DOCUMENTATION. RENESAS SHALL HAVE NO LIABILITY ARISING OUT OF ANY SECURITY VULNERABILITY OR BREACH.

  • TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT WILL RENESAS BE LIABLE TO YOU IN CONNECTION WITH THE SOFTWARE OR

  • DOCUMENTATION (OR ANY PERSON OR ENTITY CLAIMING RIGHTS DERIVED FROM YOU) FOR ANY LOSS, DAMAGES, OR CLAIMS WHATSOEVER,

  • INCLUDING, WITHOUT LIMITATION, ANY DIRECT, CONSEQUENTIAL, SPECIAL, INDIRECT, PUNITIVE, OR INCIDENTAL DAMAGES; ANY

  • LOST PROFITS, OTHER ECONOMIC DAMAGE, PROPERTY DAMAGE, OR PERSONAL INJURY; AND EVEN IF RENESAS HAS BEEN ADVISED OF THE

  • POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS.
    **********************************************************************************************************************/

#include "hal_data.h"void R_BSP_WarmStart(bsp_warm_start_event_t event) BSP_PLACE_IN_SECTION(".warm_start");void user_copy_to_sram (void);extern bsp_leds_t g_bsp_leds;extern void atcm_user_init(void);
extern void coremain(void);//BSP_PLACE_IN_SECTION(".atcm");///rzn2l may be not support segger rtt print, so exclude file SEGGER_RTT_V780c
#ifndef PRINTF
#define PRINTF
#endif
#ifdef PRINTF
#include <stdio.h>
/*** notice: g_uart0CB; g_uart0_ctrl** e2s:* 1.uart0 callback:g_uart0CB* 2.FSP-BSP-heap size:0x400* 3.-u _printf_float* 4.other link void** iar:* 1.uart0 callback:g_uart0CB* 2.FSP-BSP-heap size:0x400* 3.libray=full* 4.Semihosted=None** keil:* 1.uart0 callback:g_uart0CB* 2.FSP-BSP-heap size:0x400*/
volatile bool uart_send_complete_flag = false;
void g_uart0CB (uart_callback_args_t * p_args)
{if(p_args->event == UART_EVENT_TX_COMPLETE){uart_send_complete_flag = true;}
}
#if defined __GNUC__ && !defined __clang__
int _write(int fd, char *pBuffer, int size); //??????
int _write(int fd, char *pBuffer, int size)
{(void)fd;fsp_err_t err = R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)pBuffer, (uint32_t)size);if(FSP_SUCCESS != err) __BKPT();while(uart_send_complete_flag == false);uart_send_complete_flag = false;return size;
}
#else
int fputc(int ch, FILE *f)
{(void)f;fsp_err_t err = R_SCI_UART_Write(&g_uart0_ctrl, (uint8_t *)&ch, 1);if(FSP_SUCCESS != err) __asm("bkpt 0");while(uart_send_complete_flag == false);uart_send_complete_flag = false;return ch;
}
#endif//#if defined __GNUC__ && !defined __clang__
#endif//PRINTFextern void func_atcm_bss_init (void);
///
/*******************************************************************************************************************//*** @brief  Blinky example application** Blinks all leds at a rate of 1 second using the software delay function provided by the BSP.***********************************************************************************************************************/
void hal_entry (void)
{//R_BSP_SoftwareDelay(100, BSP_DELAY_UNITS_MILLISECONDS);/* Define the units to be used with the software delay function */const bsp_delay_units_t bsp_delay_units = BSP_DELAY_UNITS_MILLISECONDS;/* Set the blink frequency (must be <= bsp_delay_units */const uint32_t freq_in_hz = 2;/* Calculate the delay in terms of bsp_delay_units */const uint32_t delay = bsp_delay_units / freq_in_hz;/* LED type structure */bsp_leds_t leds = g_bsp_leds;/* 中断使能 */
//    __enable_irq();__asm volatile ("cpsie i");//    __ASM volatile ("cpsie i" : : : "memory");#ifdef PRINTFg_uart0.p_api->open(&g_uart0_ctrl, &g_uart0_cfg);g_uart0.p_api->write(&g_uart0_ctrl, "Renesas\n", strlen("Renesas\n"));while(!uart_send_complete_flag);uart_send_complete_flag = false;printf("date:%s\ntime:%s\nfile:%s\nfunc:%s,line:%d\nhello world!\n", __DATE__, __TIME__, __FILE__, __FUNCTION__, __LINE__);float PI = 3.1415926;printf("PI=%f\n", PI);
#endif//PRINTFR_GPT_Open(&g_timer0_ctrl, &g_timer0_cfg);R_GPT_Start(&g_timer0_ctrl);R_GPT_Enable(&g_timer0_ctrl);printf("start coremain!!!\r\n");/* If this board has no LEDs then trap here */if (0 == leds.led_count){while (1){;                          // There are no LEDs on this board}}/* This code uses BSP IO functions to show how it is used.*//* Turn off LEDs */for (uint32_t i = 0; i < leds.led_count; i++){R_BSP_PinClear(BSP_IO_REGION_SAFE, (bsp_io_port_pin_t) leds.p_leds[i]);}#if FSP_XSPI1_BOOT_SRAM_ATCM//only use fsp_xspi0_boot_SRAM_ATCM.ld//first, change FSP_XSPI0_BOOT_SRAM_ATCM in project property - symbol//second,change .ld in project property cross arm c linker - generalatcm_user_init();printf("use fsp_xspi1_boot_SRAM_ATCM.ld!!!\r\n");
#elseprintf("use fsp_xspi1_boot.ld or use fsp_xspi1_boot_SRAM_MIRROR.ld!!!\r\n");
#endifcoremain();//default 200Mhz,modify fsp-clock  CPUOCLK Mul:ICLKx1 -> CPUOCLK Mul:ICLKx2uint32_t freq_hz = R_FSP_SystemClockHzGet(FSP_PRIV_CLOCK_CPU0);printf("FSP_PRIV_CLOCK_CPU0=%ld\r\n", freq_hz);while (1){printf("running!!!\r\n");for (uint32_t i = 0; i < leds.led_count; i++){R_BSP_PinToggle(BSP_IO_REGION_SAFE, (bsp_io_port_pin_t) leds.p_leds[i]);}R_BSP_SoftwareDelay(1000, BSP_DELAY_UNITS_MILLISECONDS);}}/*******************************************************************************************************************//*** This function is called at various points during the startup process.  This implementation uses the event that is* called right before main() to set up the pins.** @param[in]  event    Where at in the start up process the code is currently at**********************************************************************************************************************/
void R_BSP_WarmStart (bsp_warm_start_event_t event)
{if (BSP_WARM_START_POST_C == event){/* C runtime environment and system clocks are setup. *//* Configure pins. */R_IOPORT_Open(&g_ioport_ctrl, &g_bsp_pin_cfg);}
}/** g_timer0CB* rzn2l core R52 havenot systick, so init g_timer0 cnt*/
extern volatile clock_t cnt;
void g_timer0CB(timer_callback_args_t *p_args)
{if (TIMER_EVENT_CYCLE_END == p_args->event){cnt++;}
}

图片

但不知道这里clock_t就是说未定义??其实是有定义的,,,
该问题3.1节有提到

2.3 debug调试

startup.c line:380加入

>#if 1 // xpsi boot debug must software_loop+software_loop2.Software loops are only needed when debugging.
>     __asm volatile (
>         " mov r0, #0 \n"
>         " movw r1, #0xf07f \n"
>         " movt r1, #0x2fa \n"
>         "software_loop: \n"
>         " adds r0, #1 \n"
>         " cmp r0, r1 \n"
>         " bne software_loop \n"
>         ::: "memory");
>#endif

图片

2.4 修改printf 重定向

图片

2.5 修改编译等级

图片

2.6 修改 迭代次数

20000--->30000

图片

图片

2.7 修改ld文件和system.c

ld文件
SRAM首选和ATCM次选的baseproject

图片

图片

图片

system.c

图片

图片

图片

3 小结

非常感谢陈工的视频教程加上亲自的远程指导,废了很大的劲才能跑通,自己主要吃了没有文化的亏;其中还有一些细小问题未能解释,很多现象只能表述,还不能解释背后的原理,所以疑惑也较多;

3.1 clock_t编译报错问题

对于clock_t编译报错问题,选择下图的toolchain,可以解决,但为什么,很难解释。。从报错的提示看有提到toolchain 所以更换了。

图片

图片

3.2 移植coremark的目的个人理解

coremark文件夹的源码在atcm运行,其他源码都是sram运行
移植coremark并且SRAM首选和ATCM次选的baseproject的目的,是让coremark代码选择在ATM上快速运行,
对于我后续移植开发,如果需要要求执行速度快的代码,也需要和修改coremark的system.c一样去修改,其他的应用代码移植过来直接默认在SRAM上。这一块如何去学习到灵活自主的修改能力?目前对于ld文件、system.c文件理解不是很透彻,还是简单的搬运!!

3.3 尝试FSP V1.30

最开始尝试FSP V1.30 移植coremark,到2.4都是可以的,后续进行2.7ld文件、system.c的修改,首先版本差异导致这两个文件差异很大,其次修改后报了很多奇怪的错误,个人能力有限很难看懂。干脆改成FSP1.2了,希望有大佬能够搞定。我也学习下。

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/236573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python】进阶--->网络编程(一)

一、网络编程 网络 : 为了联络多方然后进行通信,将数据从一方传递给另一方. 网络协议 : 不同计算机只需要通过联网,那么就可以相互进行传递数据,那么不同种类的计算机之间就和不同语言的人之间沟通一样,需要一种大家都认可都遵循的协议即可. 那么计算机都遵循的网络通信协议叫…

Kafka--Kafka日志索引详解以及生产常见问题分析与总结

一、Kafka的Log日志梳理 ​ 这一部分数据主要包含当前Broker节点的消息数据(在Kafka中称为Log日志)。这是一部分无状态的数据&#xff0c;也就是说每个Kafka的Broker节点都是以相同的逻辑运行。这种无状态的服务设计让Kafka集群能够比较容易的进行水平扩展。比如你需要用一个新…

嵌入式开发工程师

嵌入式开发 岗位需求 上岗必备 文章目录 嵌入式开发前言一、负责新产品的电路图、PCB、嵌入式程序、软硬件调试等工作二、负责对现有产品进行硬件优化、调试、维护、排故等工作三、 负责各种单片机,传感器,元器件选型以及BOM表整理四、 负责硬件产品研发和量产过程中项目设计…

网络技术基础与计算思维实验教程_3.1_单BSS实验(基本服务集合实验)

无线局域网的最小基本组件是基本服务BSS 实验内容 实验目的 实验原理 实验步骤 为了显示AP的有效通信范围 切换到物理工作区 把物理工作区导航到城市家园 直接在城市家园放置AP0 可以看到AP0的通信范围 放置笔记本电脑 在默认情况下 笔记本电脑上 安装了以太网卡 现在换成无…

大模型之二十一-小语言模型塞道开启

当前提到大语言模型&#xff0c;大家想到的都是动辄百亿规模以上参数量的模型&#xff0c;13B、70B都是稀疏平常入门级的&#xff0c;但是目前从模型层面来看&#xff0c;模型参数量的规模两极分化已经来临&#xff0c;早期各大公司为了效果怼上去&#xff0c;采取了简单粗暴的…

[Angular] 笔记 4:ngFor

ngFor 是一个 for 循环&#xff0c;只能用于循环遍历 list&#xff0c;不能用于遍历单个实体。 下图中的 pokemons 通常是数据库中的数据&#xff1a; 例子&#xff1a; app.components.ts: // 使用类型检查 interface Pokemon {id: number;name: string;type: string;// is…

【postgresql】PSQLException: An I/O error occurred while sending to the backend.

org.postgresql.util.PSQLException: An I/O error occurred while sending to the backend. 发送到后端时发生I/O错误。 java.io.IOException: Tried to send an out-of-range integer as a 2-byte value: 34284 尝试将超出范围的整数作为2字节值发送&#xff1a;34284 pos…

OpenHarmony开发环境快速搭建(无需命令行)

一. 搭建Windows环境 在嵌入式开发中&#xff0c;很多开发者习惯于使用Windows进行代码的编辑&#xff0c;比如使用Windows的Visual Studio Code进行OpenHarmony代码的开发。但当前阶段&#xff0c;大部分的开发板源码还不支持在Windows环境下进行编译&#xff0c;如Hi3861、H…

LLM微调(四)| 微调Llama 2实现Text-to-SQL,并使用LlamaIndex在数据库上进行推理

Llama 2是开源LLM发展的一个巨大里程碑。最大模型及其经过微调的变体位居Hugging Face Open LLM排行榜&#xff08;https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboard&#xff09;前列。多个基准测试表明&#xff0c;就性能而言&#xff0c;它正在接近GPT-3.5…

助老理发,寒冬送暖从头开始

为进一步弘扬尊老、敬老、爱老、助老的中华民族传统美德&#xff0c;解决老年人年龄大、冬季出行不便的问题&#xff0c;2023年12月20日&#xff0c;绿萝志愿服务队在翠堤社区开展了“助老理发”志愿活动。 大雪过后天气格外寒冷&#xff0c;但志愿者们依旧早早的来现场做…

【Flink-Bug】Flink 自定义 Sink 重写 RichSinkFunction 方法时重复调用 open 的解决方案

【Flink-Bug】Flink 自定义 Sink 重写 RichSinkFunction 方法时重复调用 open 的解决方案 Flink 自定义 RichinkFunction 时可能会重写 open 方法进行某些连接的初始化操作&#xff0c;但是会出现重复调用 open 方法的问题&#xff0c;如&#xff1a;MQ&#xff0c;如果重复调用…

扭蛋机小程序搭建,“互联网+”下的发展优势

随着我国生活水平和消费能力不断提高&#xff0c;人们对各种潮流文化类的产品需求也快速上升。至此&#xff0c;我国潮流文化市场得到了快速发展&#xff01; 扭蛋机作为潮玩中的一种商业模式&#xff0c;深受不同年龄层用户的喜爱。并且扭蛋机的种类也是各式各样&#xff0c;…

Vue 官方周报 #124 - 使用JSDoc记录组件属性

Hi &#x1f44b; 当你将鼠标悬停在IDE中的组件上时&#xff0c;显示组件属性所对应的描述&#xff0c;这个功能在开发过程中会很有用。你可以在传递给defineProps函数的TypeScript接口中使用JSDoc来实现这一点&#xff1a; MyComponent.vue <script setup lang"ts&…

【音视频 | AAC】AAC格式音频文件解析

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

大创项目推荐 深度学习 植物识别算法系统

文章目录 0 前言2 相关技术2.1 VGG-Net模型2.2 VGG-Net在植物识别的优势(1) 卷积核&#xff0c;池化核大小固定(2) 特征提取更全面(3) 网络训练误差收敛速度较快 3 VGG-Net的搭建3.1 Tornado简介(1) 优势(2) 关键代码 4 Inception V3 神经网络4.1 网络结构 5 开始训练5.1 数据集…

Python知识(1/20):变量、表达式、什么是程序?

23年是AI井喷的一年&#xff0c;我对AI的态度是恐惧的&#xff0c;以往我只需要CRUD就能需要的工作&#xff0c;AI能够编写出来&#xff0c;虽然现在还有很多缺陷&#xff0c;但是我比较喜欢向前看&#xff0c;在我未来我感觉我能遇到我被AI替代的那天。 我该怎能么办呢&#…

基于APB总线的SM4密码协处理器实现(附Verilog代码)

基于APB总线的SM4密码协处理器实现&#xff08;附Verilog代码&#xff09; 本文内容摘要理论依据和设计内容SM4分组密码算法APB_slave协处理器 测试过程与结果调试经历测试结果SM4.0部分测试APB协处理器部分测试 整体代码 本文内容摘要 本文使用Verilog语言实现SM4加密协处理器…

智能养殖解决方案:如何利用485转WiFi无线路由

随着科技的发展&#xff0c;智能养殖已经成为了一种新兴的生产方式。智能养殖不仅可以提高养殖效率和质量&#xff0c;还可以减少资源浪费和环境污染。其中&#xff0c;485转WiFi无线路由器作为智能养殖解决方案中的重要组成部分&#xff0c;发挥着关键的作用。以下将从三个方面…

多维时序 | MATLAB实现BiTCN-Multihead-Attention多头注意力机制多变量时间序列预测

多维时序 | MATLAB实现BiTCN-Multihead-Attention多头注意力机制多变量时间序列预测 目录 多维时序 | MATLAB实现BiTCN-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | MATLAB实现BiTCN-Multihea…

IP子网划分【专题突破】

1、IP地址基础 IPv4地址是32位&#xff0c;采用点分十进制方式表示&#xff0c;其次必须掌握二进制的转换。 IPv6地址是128位&#xff0c;采用冒号分隔的十六进制表示方法。 2、IP地址的分类 RFC1918规定的私有地址 A类地址范围&#xff1a;10.0.0.0-10.255.255.255(1个A类…