关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7968|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
" e$ ?+ {$ o, y2 v( s( ^9 d4 Z( y0 r* q# O/ _  \
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
7 f# \* S  p" U, C& i$ J
0 W8 \, x1 q' m# S其他程序段。。。。。. N8 k$ [2 D& y3 G

" v- h5 ~; L' n+ Z4 U5 m   free(x_d);' q3 H1 \  h2 q& C" v$ f6 _
/ j6 ?$ W# z' c7 G
使用DSP侧单独调试功能,验证动态申请没有问题,
/ I1 E( ^/ x8 y' e, O/ Q, R* \" ]$ B% ]2 u0 ]6 o
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。7 o4 b$ g$ [+ h

9 b- |/ ~) l1 b) Y+ j# L+ k  U! q; L$ b$ r

9 v6 H$ D+ Q2 h& i
/ _- B; ]7 W6 L5 c: Z2 B) P3 f8 ?# s( c6 o  g" Q9 X5 t

4 U. k# }( i- g$ G1 M3 W& _9 I& P5 `3 B7 {) B

5 B7 ]* L2 H, T0 ^# }  B6 K7 P4 _! O: i# j2 R; C1 x
* A- r! N' g( J4 k2 u9 j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& G" M. L3 f5 R. I7 q  e我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 J# ~, D' T; G& C(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& b* z+ X0 Z' H
+ a: z$ T  O  a. e1 f8 X+ C
是不是需要在DSP.CFG中进行配置
4 d* u9 e) u5 A( j5 _我现在的配置为
9 c3 B4 |- B, E( v3 m6 C
2 R, V' d) H; N4 a; R$ ]$ {- U/*& @6 Q+ h% K# p; q: [
*  ======== Operating System Configuration ========+ r$ E* [, F: w" i, Y
*/
8 d5 `$ P2 s$ ?* L
1 E: B0 {+ T1 w* z+ J/* no rts heap */
; M8 B9 ^. U  B6 P6 }6 M: ^. EProgram.heap = 0;
; h+ c2 `3 {. i/ QProgram.argSize = 100;  /* minimum size */$ S, T8 H& i$ V1 ]6 S
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 }9 f* G5 l2 s3 V& S' ~
! K- U( Y6 @- E2 `4 I/* create a default heap */. l& W( w' r9 b2 Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 n* D* E" D% R8 Y6 K7 L8 |
var heapMemParams = new HeapMem.Params();
. t% `% n& N1 |# H, QheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( h3 Y& D, p- Q2 p9 V4 y& o: v( `

$ H# [* l) D- B( z3 w. r
var Memory = xdc.useModule('xdc.runtime.Memory');
/ \8 Z0 b, Y; Y. r4 _! l& }: yMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% j2 t) x8 T1 x+ A
' ~; U; z+ A. M; o5 [' ]6 N  ?/* configure System module */2 H- Y' w7 R* `
var SysMin = xdc.useModule('xdc.runtime.SysMin');2 N9 H2 }# {* E! R* o
SysMin.bufSize = 0x1000;3 S& ^, d: }* L6 r1 C6 h
SysMin.flushAtExit = false;+ ^* L" B  B8 B
% a: `4 n4 z" Y: N
var System = xdc.useModule('xdc.runtime.System');
+ S2 B9 j. c8 C5 e9 `9 p, _( \System.SupportProxy = SysMin;
8 B( R# k$ E9 J* a6 b4 C5 l# ]) R- ^. Q0 Z: V/ ^' I+ T  Z
/* configure SysBios to use the lower half of Timer 1 */9 u. J' _0 F; U" P
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, @( D( _) V5 z
var Clock = xdc.useModule('ti.sysbios.knl.Clock');. a; P. Z& J4 d' s
Timer.timerSettings[1].master = true;. s# Y+ ?' g  i( n' F3 l# O7 t0 ~
Timer.defaultHalf = Timer.Half_LOWER;6 x/ H% _6 E; E. x8 w- u
Clock.timerId = 1;
; G; J, N: ]3 d& }) {. [, E( w+ C6 L! _5 a. D1 g
) \& f# m  j4 Y; ~
/*
0 I2 L- Y+ m! R* [+ y *  ======== Miscellaneous Configuration ========1 h9 t; b4 E+ b1 n
*/" M7 q- O  B6 V, F. J

; K1 U9 A! j3 v- M- V! r/* set default diags mask */) Q0 y8 a4 W" n
var Diags = xdc.useModule('xdc.runtime.Diags');
5 z) U% Z% O: Z3 X) Jvar Defaults = xdc.useModule('xdc.runtime.Defaults');
5 Q+ _1 Y% D& @! o  `; S4 O
& S, e$ H& L" b" `7 QDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: J5 {- u( U: ^3 W1 j' X
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
' w6 B: d8 ]- l; aDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* `- c8 {. {9 d- d$ v, y& JDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 i( ?1 D0 D% t8 _0 d) C7 V* K
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
$ ]/ ]) Q! l  c, |+ M2 |4 wDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;1 z4 ]6 O2 [3 _3 H
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
* F# @. o0 i8 ~) x! O; ^* vDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 `9 K7 b; A9 s# S, y$ f8 P: z) T* D* d3 d
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& Q7 s% ~5 `0 s8 v
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;/ v) S- g: y% v$ z' L4 L5 ?) }
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- {3 j( J- M" H. z
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. K# x5 v" t: E* n* x
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% |' K, {& ^" K; k# Y4 ^Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ d, o  ]3 X9 G' s

$ {$ O. m# w( Z2 Q8 Q& P/* override diags mask for selected modules */
; L7 C( B. y( Z8 P2 qxdc.useModule('xdc.runtime.Main');1 T, J! u0 l6 X9 D- h; ~: Q+ r9 a
Diags.setMaskMeta(9 v6 M( M2 l: w3 Y  A4 ?
    "xdc.runtime.Main",+ a) Z* b4 G" R1 c
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
4 I5 h; `! w( t% I" ?    Diags.RUNTIME_ON
$ w8 x# s3 ~0 |);
+ a* N1 U3 L2 D( \: N4 b, h8 h" [3 {; w! E) M
var Registry = xdc.useModule('xdc.runtime.Registry');0 j# \8 f# l, B, c2 v$ S
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
) G: |" o; A+ Y6 Q; n3 \" fRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: X! H6 ^  y7 }
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
7 @# ^2 {" e  A! c2 w& K  d( VRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;' v# F- T( `" g! d" \7 y
  J% ~: a  b4 O3 k  j/ p
/* create a logger instance */
* V2 R6 Z! P  lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 @2 l# _# l. e9 z6 cvar loggerBufP = new LoggerBuf.Params();
5 ]/ C( c) b( {% SloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% X" b/ H. q9 j3 @* ?2 {
loggerBufP.bufType = LoggerBuf.BufType_FIXED;; |, X3 w) e: D6 c7 V; V9 `

  ~7 h2 \' W" [/ Lvar appLogger = LoggerBuf.create(loggerBufP);
0 c7 L: m' [0 @appLogger.instance.name = "AppLog_Core1";3 i& @1 C6 u( ?
Defaults.common$.logger = appLogger;
/ s) Q) f4 p6 E+ _Memory.defaultHeapSize = 0x8192;   
$ H# q% R% N5 E" R: @0 kIdle.idleFxns[0] = "&LEDStatus";2 y, x) U+ ?# I  v& X
Cache.initSize.l2Size = Cache.L2Size_32K;
4 A5 P3 t+ z& D" l1 x1 ]( X9 U  b: u, {
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */3 L; h7 [  `& b6 z$ }, ]% a
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: ^0 V4 q9 e+ h0 A$ G- S  x
var heapMemParams = new HeapMem.Params();% a- Q2 g# Y; R5 W
heapMemParams.size = 0x4000;3 {4 h" x1 n  x7 z9 d& O, r! f" H

* l: e% U, X- q% _* c( j& jvar Memory = xdc.useModule('xdc.runtime.Memory');
1 @  O% B+ j/ H1 `" F% M7 T  t# B% BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);1 r; T0 k; P  t+ G" m7 P9 s3 t
7 h$ M' j0 r# N1 `# I4 o
我大约calloc  每次共计大小为5K*16bits,
0 ~# h2 B9 W8 R* Y$ d% p9 T而默认配置才0x4000、需要改大。8 u! U* ^5 j8 v( N

3 [8 Y$ W/ A) K& a: s' u. Q: v  U
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */! D1 `" [( q9 ^$ `
Program.heap = 0;' P6 J( ?8 Q8 b0 W4 f3 \$ i2 f
Program.argSize = 100;  /* minimum size */
4 {: I  p. Q( }. z+ p5 rProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-3-12 07:50 , Processed in 0.045647 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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