首页 > 系统相关 >中科蓝讯内存COM区和Bank区:【图文讲解】

中科蓝讯内存COM区和Bank区:【图文讲解】

时间:2024-11-16 13:45:01浏览次数:3  
标签:芯片 COM 代码 RAM Bank 蓝讯 com bank 加载

中科蓝讯芯片采用最近比较流行的RISC-V(32位)开源内核架构 + 国产RT-Thread操作系统.  不过从代码上来看, 操作系统代码已经被封装到库中, 一般用户可以不用涉及操作系统代码, 降低了开发难度.

中科蓝讯芯片 "冯·诺依曼结构", 即代码与数据的统一编址. 框架结构大致如下:

芯片内部一般会封装一颗512K或1M SpiFlash, 用于存放代码及资源文件/参数记忆等. SpiFlash和芯片之间通过spi接口进行通信.

首先,代码不会直接在SpiFlash上运行, SpiFlash中所有程序及数据均需要先通过spi接口加载到芯片RAM中, CPU再从RAM中取指令或数据运行.

1:com区和bank区

基于上述的程序存储框架, 中科蓝讯芯片在程序编写时, 有两个重要的概念:

com区(公共区) 和 bank区.

com区(公共区):

芯片上电, 一般从Mask程序区开始运行, 在进入main函数之前, 程序会先把com区程序从Flash加载到芯片内部Ram. 由于在程序的整个生命周期内, com区程序会一直保留在RAM中. CPU执行com区代码会很快.  但由于芯片RAM有限, com区一般分配在几十K以内.

bank区(也称为flash区):

Flash中的bank区(存储区)一般是几百K以上.

RAM中的bank程序运行区(类似cache), 一般从几K到几十K不等.

由于RAM中的bank区远远小于FLASH中的bank区, 所以CPU会根据需要不断把Flash(bank程序存储区)中的代码动态替换(加载)到 RAM中的bank程序运行区运行. 由于芯片与Flash之间通过spi进行通信, bank区代码执行速度相对比较慢.

 2:开发Tips:

1:中断函数(及其子函数)必须放入com区, 否则(放入bank区)会导致死机.

中断响应需要非常及时, com区程序常驻于RAM中, CPU可以迅速响应中断函数.  如果中断函数放入bank区, 中断响应时,可能该bank区还未加载到RAM中, 还需要先加载再运行,耗时相对较慢.  为了防止中断响应慢,芯片做了限定: 中断中加载bank区代码则直接死机. 另外需要特别注意: 中断函数中不能有switch语句, swith语句编译后生成的跳转常量表会默认放到bank区, 引起中断函数访问bank区死机. 请用if-else语句代替switch语句.一些实时性要求比较高的代码,首选放入com区.

2).函数前没有AT指定存放段的代码, 默认放入bank区,  bank区代码自动加载(或替换), 不需要人工干预.

由于bank区加载到RAM, 需要spi通信, IO翻转会有一定干扰, 在一些对干扰敏感的应用中, 如FM, 可以把所有相关程序放入同一个命名的bank, 这样bank加载时, 会大概率地把所有同一bank中的程序一次性加载到RAM中,减少程序运行时可能不断多次地加载引起的spi通信干扰.

3:函数放入com区的写法

在函数前面加入AT(.指定段名到com区) 即可.示例如 usr_tmr1ms_isr函数前面的AT(.com_text.timer)

AT(.com_text.timer)

void usr_tmr1ms_isr(void)
{
    gui_scan();                   
    .....
}

在map.text中可以看到, usr_tmr1ms_isr位于 0x20e4a.位于0x20000~ (0x20000+34K) 的com区内.

另外有一点, printf参数中的字符串常量也是默认放在bank区中, 如果在中断中调用printf, 也需要把字符串常量放入com区.

如下:

AT(.com_text.str1)

const char str1[] = "Com String";

AT(.com_text.str2) //注意每个字符串前都需要增加 AT定位到com区去.

const char str2[] = "val = %d\n";

调用printf时, 直接使用该字符串即可:

AT(.com_text.timer)

void usr_tmr5ms_isr(void)

{

    printf(str1);

    printf(str2, test_val);

    ......

}

标签:芯片,COM,代码,RAM,Bank,蓝讯,com,bank,加载
From: https://blog.csdn.net/weixin_66299220/article/details/143750007

相关文章

  • [Codeforces Round 987 (Div. 2)](https://codeforces.com/contest/2031)解题报告
    CodeforcesRound987(Div.2)太好了是阳间场,我们有救了感觉脑子生锈了qwq,F题做不出来A分析知如果有\(i<j\)且\(a_i>a_j\)的情况出现则\(i\)和\(j\)一定至少改一个。所以答案即为\(n-cnt\),\(cnt\)为众数个数。B发现一个数离自己原本的位置距离不会超过\(1\),有......
  • Java反序列化-Commons Collections3利用链分析详解
    介绍CC3与CC1和CC6的主要区别在于,CC1和CC6依赖反射机制来执行Runtime.getRuntime().exec()等危险命令,而如果服务器将这些方法列入黑名单,这两种方式就会失效。相比之下,CC3通过类加载器动态加载恶意类来执行危险函数,绕过黑名单限制,从而达到命令执行的目的。公众号:T......
  • 在 tsconfig.json 文件中,compilerOptions.types 字段用于指定 TypeScript 编译器应该
    在tsconfig.json文件中,compilerOptions.types字段用于指定TypeScript编译器应该包含的类型声明文件。这些类型声明文件提供了类型信息,使得TypeScript能够在编译时进行类型检查和提供智能提示。你提到的配置项指定了几个常用的类型声明文件,下面是对这些配置项的详细解释:配......
  • 伴随症状 伴随因素 回归分析 相关系数 多元分析 concomitants
    https://zh-cn.statisticseasily.com/词汇表/数据分析中的伴随项是什么/Whatis:ConcomitantsinDataAnalysishttps://statisticseasily.com/glossario/what-is-concomitants-in-data-analysis/Whatis:ConcomitantsinStatisticsConcomitantsrefertovariables......
  • vue3:computed
    扫码或者点击文字后台提问原文: https://mp.weixin.qq.com/s/36dd--oj6jmkZblfJRh4iw computed支持选项式写法和函数式写法1.选项式写法支持一个对象传入get函数以及set函数自定义操作 2.函数式写法只能支持一个getter函数不允许修改值的<template><div><d......
  • CloudCompare——CSF布料模拟算法
    布料模拟算法1、流程概述2、详细过程3、参考文献4.软件实现5.相关链接1、流程概述1)利用点云滤波算法或者点云处理软件滤除异常点;2)将激光雷达点云倒置;3)设置模拟布料,设置布料网格分辨率GR......
  • Design Compiler:Topographical Workshop Lab2
    相关阅读DesignCompilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm=1001.2014.3001.5482        本文是对Synopsys DesignCompilerTopographical/GraphicalWorkshopLabGuide中Lab2的翻译,Lab文件可以从以下链接获取。SynopsysDesig......
  • Encoder Data compression
    Lab3:EncoderIntroductionDatacompressionistheprocessofencodinginformationusingfewerbitsthantheoriginalrepresentation.Run-lengthencoding(RLE)isasimpleyeteffectivecompressionalgorithm:repeateddataarestoredasasingledataandth......
  • Your last search took too long to run. This is probably a combination of at leas
    Yourlastsearchtooktoolongtorun.Thisisprobablyacombinationofatleasttwothings:1.Thesizeofthecorpus(largercorporalikeiWeborNOWareslowerthansmallercorpora),or2.Thefrequencyofthewordsorstringsinyoursearch(atleasto......
  • docker compose网络
    基本概念默认情况下,Compose会为我们的应用创建一个网络,服务的每个容器都会加入该网络中。这样,容器就可被该网络中的其他容器访问,不仅如此,该容器还能以服务名称作为hostname被其他容器访问。默认情况下,应用程序的网络名称基于Compose的工程名称,而项目名称基于docker-compose.yml......