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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构! m$ ^( u% j& K

) D0 e" m4 B* b0 g- [: V  `1 c. F    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 u9 k1 z5 w( P; f* G$ P6 x
6 m6 S3 @6 h4 `% H8 G
其他程序段。。。。。
8 |9 Q* V# m5 k$ O  d
8 |' ]" B2 E. C: @   free(x_d);
) a) \. L2 ~  j" @4 t' [) l) T( }, p  ^% `% v4 ^: s* q
使用DSP侧单独调试功能,验证动态申请没有问题,
; T. N* M. q4 q2 `9 _) p
. H" a+ c3 O9 }但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 R: n) S% s  k: Y

& U- W- I0 q' V% \% S1 }# _- Y, L) W$ d" c! _  U1 `
% X  I% e* s9 p: o- Z" L: J

, e5 P$ T; ]: c# O; u! b; N
' g6 C2 T- A/ q2 }! ^# ^
- V" `: R5 g' X
0 l, L; U! h' w* W+ E" e
& E+ Y2 M& {$ s2 Y
* M0 S7 ~5 h% s* U6 w) ~+ O3 a) f  A$ }6 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* T( P! y* S+ w! ^2 }) X我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 [. J) f; u  p8 Z& V(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# b5 l) c6 m: X7 h+ A

. V, a* M, S7 e8 N* w是不是需要在DSP.CFG中进行配置7 Z1 l1 y  G1 E3 g7 Z" c
我现在的配置为
; D5 j' N$ G; R! q7 ?3 T$ i( a" i9 t2 Q# i7 {0 T6 k! _: B+ G
/*
8 e, C2 F  q/ y0 L- W  Y *  ======== Operating System Configuration ========
% L% o5 J6 O0 |1 ^' u4 E! l7 y4 B& D */
$ x, Y, S3 p; r8 q
9 M* Z* R+ }3 Q0 @( k" u1 Z: ^5 w. f/* no rts heap */- @- z  `. s, J
Program.heap = 0;) t% d8 `+ J8 C8 J' b
Program.argSize = 100;  /* minimum size */
: n# k' d$ n! ^9 K% r9 xProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 N3 P2 v( E' m1 N- i! L8 f! E, {3 ]. j$ @, U4 c' Z
/* create a default heap */
$ f! S1 Q; T2 A' l. a2 n: Jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 e% A3 s0 \6 T: B
var heapMemParams = new HeapMem.Params();$ b) T  }* {, g2 \% D
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ x1 W/ E4 Q/ A$ _& ^' ~: }+ s- B* s5 K! y, V2 Q
var Memory = xdc.useModule('xdc.runtime.Memory');0 K  J$ p- W$ n; y* V/ k2 S0 G4 q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% \6 \7 D* Z' j  `0 Y8 u+ T
* ~6 h1 T5 x6 D* P5 A; ^: e
/* configure System module */
$ j* N+ d# o2 _. S7 Z0 o6 Yvar SysMin = xdc.useModule('xdc.runtime.SysMin');; Y) P1 s  G6 Y1 }3 x
SysMin.bufSize = 0x1000;# @5 Y; Y# p2 i7 X3 F% U) Z  z
SysMin.flushAtExit = false;  a# E2 c( Y$ F$ ~9 q2 s& A

: a' X  u7 E; X% P" Svar System = xdc.useModule('xdc.runtime.System');
1 A3 V8 g/ t0 L) f! _* l: `System.SupportProxy = SysMin;
" ~% z8 K7 F: u( N& s1 q/ y5 P
3 B* }5 b- z$ o3 v# i0 z# H# Z+ q/* configure SysBios to use the lower half of Timer 1 */1 T! m7 N5 I1 y- d
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. ]8 {3 w2 N* c- ivar Clock = xdc.useModule('ti.sysbios.knl.Clock');
! \: w7 p/ s. l$ j! DTimer.timerSettings[1].master = true;
) r9 s" m4 ?: }Timer.defaultHalf = Timer.Half_LOWER;- U! B& B0 g, Q0 L/ A
Clock.timerId = 1;' J  E' c: q+ R! i; T- L

0 o0 s  v* k0 f$ N& N5 T6 F# f  ^- m5 c) W+ S6 k2 q
/*
( d1 K% l/ c1 p8 P9 I9 x *  ======== Miscellaneous Configuration ========
$ K' ]. F' R8 g, I0 O( \" `* o) N */
+ I5 V* A: E2 u  C
3 W$ T; l4 d& \1 h5 ]0 g/* set default diags mask */2 E% v3 Y8 V9 G7 r0 b& V8 d
var Diags = xdc.useModule('xdc.runtime.Diags');
. ?6 Z& @% v8 hvar Defaults = xdc.useModule('xdc.runtime.Defaults');
) J4 p# @+ G0 _, l3 V* U" T
7 |% K/ P; B* R+ aDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
6 N* {7 {" f& `& ]Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 [5 ~8 F6 ^8 i, \Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; m8 X8 E# h8 H! X4 G' _Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
" @% v! I4 p6 \Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 T8 y" l! g$ z, E1 ?
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 k) o7 u# d0 \: j9 ^  b" w* l6 e
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 ]7 l1 L0 S3 M8 V7 yDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 r9 L  L6 f/ O* GDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;) E1 A& B" L  Y- w
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% H4 n4 X8 F& K
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 y, r# Y/ M8 }, _# u1 }9 y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 l( J: x, l# x" m& V- ^
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 q+ w* T* u8 \( z6 Z) l% [Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ |* r4 Q5 H- ^' f
! ^/ L5 j( T  j6 s% j! C
/* override diags mask for selected modules */
: ?3 p) S' D4 Y. m; k# y4 txdc.useModule('xdc.runtime.Main');4 z6 l% |! ~" Z4 i5 L/ v# x
Diags.setMaskMeta(
; k' R8 u% z! E2 B1 X; o; T    "xdc.runtime.Main",1 ^- ]# |+ r9 j& f5 g( F
    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 v: S$ y; u+ H% G% A0 q
    Diags.RUNTIME_ON
, L6 }, P; T3 ~) @) c8 A  c% I0 S);: z4 a7 C" D8 y9 t4 l

  u8 l; b2 b4 p* Bvar Registry = xdc.useModule('xdc.runtime.Registry');1 S# n( l1 [) j0 s/ r
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ s; }, P+ F' }) g" Y
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 ~" S: N$ u" s
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;% _3 l* Y# `2 o
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 h: o9 W0 k& l/ {2 T$ u
. @5 o, Z2 f) ^- X- Q
/* create a logger instance */
0 A( G! B) m4 h. s7 u5 v2 H: s  Pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');, Z3 }6 r* G+ U1 T
var loggerBufP = new LoggerBuf.Params();
  C: G% ]6 A. E. C3 eloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 w4 k) k; H1 b" A% N7 e2 ~loggerBufP.bufType = LoggerBuf.BufType_FIXED;
- S: ]1 r; q1 T9 Z2 t
  h- e9 [( |# _& F1 ^( O9 lvar appLogger = LoggerBuf.create(loggerBufP);
* _! k, h( `- y' f5 g  KappLogger.instance.name = "AppLog_Core1";
) u2 x: L8 m- F4 yDefaults.common$.logger = appLogger;
3 C4 F) d& u& h/ l# A3 BMemory.defaultHeapSize = 0x8192;    " {6 [2 D& F& g# J0 {
Idle.idleFxns[0] = "&LEDStatus";  K3 ~- @1 b4 K; x! ~  ~
Cache.initSize.l2Size = Cache.L2Size_32K;
) X0 \3 [& Q/ y) V, x, M1 Y# J( W9 K- c# A( \( c( i" B8 w
回复 支持 反对

使用道具 举报

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 */% Y! p9 o& q2 N6 x3 q. d" a
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% u% u- g1 Z7 m7 {5 D
var heapMemParams = new HeapMem.Params();
) ~( H6 r2 n  l) s$ C5 E$ nheapMemParams.size = 0x4000;( ?% p- ^- s# p$ \& n% K
0 }: n3 K9 J8 [* O9 S& }$ e
var Memory = xdc.useModule('xdc.runtime.Memory');
- D1 k/ ]6 s) N! hMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 b- X' ]# _6 w6 n+ f  L: ]) u+ ^/ }% K: @
我大约calloc  每次共计大小为5K*16bits,+ t  a8 M* j8 V3 L7 x
而默认配置才0x4000、需要改大。
+ ~/ h. F9 F% W2 U0 t- A& y0 F; ~' U' ^. f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, _9 `  A8 ]2 X
Program.heap = 0;! y+ I, E, R+ g& Q! l9 M* D2 G* N
Program.argSize = 100;  /* minimum size */3 j) l) P. I0 J- e+ D" a( `4 R6 T
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-5 05:06 , Processed in 0.040567 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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