查看: 3739|回复: 2

[求助] MPU配置和scf文件哪个起作用

[复制链接]

该用户从未签到

15

主题

41

帖子

0

中级会员

Rank: 3Rank: 3

积分
285
最后登录
2023-4-22
发表于 2019-11-7 10:57:33 | 显示全部楼层 |阅读模式
1.MPU里配置的A内存区域为cacheable,在scf文件设置为NonCacheable,哪个起作用?2.scf文件设定为对齐byte为32,实际程序中为64对齐,执行的时候应该是64对齐吧?

回复

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24863
最后登录
2025-7-18
发表于 2019-11-7 17:38:53 | 显示全部楼层
你的scf是具体是怎样呢??
回复 支持 反对

使用道具 举报

该用户从未签到

15

主题

41

帖子

0

中级会员

Rank: 3Rank: 3

积分
285
最后登录
2023-4-22
 楼主| 发表于 2019-11-9 06:18:01 | 显示全部楼层
#define m_flash_config_start           0x60000000
#define m_flash_config_size            0x00001000

#define m_ivt_start                    0x60001000
#define m_ivt_size                     0x00001000

#define m_interrupts_start             0x60002000
#define m_interrupts_size              0x00000400

#define m_text_start                   0x60002400
;#define m_text_size                    0x1F7FDC00/*503MB*/
;#define m_text_size                    0x03FFDC00
#define m_text_size                    0x007FDC00 /*8MB*///对应编译后的code
;#define m_text_size                    0x002FDC00

;#define m_data_start                   0x20000000
;#define m_data_size                    0x00010000

;#define m_ncache_start                 0x20010000
;#define m_ncache_size                  0x00010000

#define m_data0_start                   0x20000000 //DTCM

#define m_data0_size                    0x20000   //128K

;#define m_data_start                   0x80000000
;#define m_data_size                    0x01E00000
;#define m_data_size                    0x00A00000//10MB

#define heap_start                     0x80000000

;#define __stack_size__                 0x2000  /*8K*/
;#define __heap_size__                  0x600000    /* heap size: 6M */  

;#define m_ncache_start                 0x81E00000
#define m_cache_start                 0x80600000
#define m_cache_size                  0x00200000//2MB


#define m_ncache_start                 0x80900000
#define m_ncache_size                  0x00600000//6MB


         


/* Sizes */
#if (defined(__stack_size__))
  #define Stack_Size                   __stack_size__
#else
  //#define Stack_Size                   0x0400
  #define Stack_Size                     0x2000
#endif

#if (defined(__heap_size__))
  #define Heap_Size                    __heap_size__
#else
//#define Heap_Size                    0x0400
   #define Heap_Size                    0x400000
#endif

LR_m_rom_config m_flash_config_start m_flash_config_size {   ; load region size_region
        RW_m_config_text m_flash_config_start m_flash_config_size { ; load address = execution address
        * (.boot_hdr.conf, +FIRST)
        }  
}

LR_m_rom_ivt m_ivt_start m_ivt_size {   ; load region size_region
        RW_m_ivt_text m_ivt_start m_ivt_size { ; load address = execution address
        * (.boot_hdr.ivt, +FIRST)
        * (.boot_hdr.boot_data)
        * (.boot_hdr.dcd_data)
        }       
}

;LR_m_text m_text_start m_text_size {   ; load region size_region
LR_m_text m_interrupts_start m_text_start+m_text_size-m_interrupts_start{

   VECTOR_ROM m_interrupts_start m_interrupts_size {
    * (RESET,+FIRST)
  }
  ER_m_text m_text_start m_text_size {
    * (InRoot$$Sections)
    .ANY (+RO)  
  }
  
  RW_m_data0 m_data0_start m_data0_size-Stack_Size{;
  
   .ANY (+RW +ZI)
   *(m_usb_dma_init_data)
   *(m_usb_dma_noninit_data);
  }

  ;ARM_LIB_HEAP heap_start EMPTY Heap_Size {//堆区
  ;}
  //ARM_LIB_STACK m_data_start+m_data_size EMPTY -Stack_Size { ; Stack region growing down
  ARM_LIB_STACK m_data0_start+m_data0_size EMPTY -Stack_Size { ; Stack region growing down//栈区
  }

  RW_m_cache m_cache_start m_cache_size {
    * (Cacheable.init)                    
    * (Cacheable)                        
  }
  
  RW_m_ncache m_ncache_start m_ncache_size {
    * (NonCacheable.init)                    
    * (NonCacheable)                        
  }
}


LR_m_heap heap_start  Heap_Size {;//堆区
    ARM_LIB_HEAP heap_start EMPTY Heap_Size {
    }
}

我的MPU的region7设置是这样的
    MPU->RBAR = ARM_MPU_RBAR(7, 0x80000000U);
    MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 1, 0, ARM_MPU_REGION_SIZE_16MB);
标红部分
0x80000000---0x80400000  堆区
0x80600000--0x80800000  scf中定义的cache区
0x80900000--0x80F00000  scf中定义的noncache区
问题1:请问我标红的部分哪些能被cache访问?
问题2:GUI的缓存和显存放在cache区好还是非cache区好?现在没用到那么苛刻的场景,貌似都行,但是还想好好学一下。
回应对齐,我在scf文件中没有设定对齐,好像默认是8byte对齐,看过别人的例子这么说的,在这是为了再次确认一下,所有的知识点不见得都需要我亲自区验证
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-19 04:56 , Processed in 0.084892 second(s), 21 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表