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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构* G* F* n; m8 t) \1 ^* h; r# @" f
, ^, g; a# u8 d" b8 W1 Z8 V$ D
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
4 g) G5 P. C/ E8 ]
  T) x  i. R4 Y' t( ]/ i其他程序段。。。。。
9 I! _$ {: E6 a+ n* k% S$ n& g* F9 G ( L- ^6 r0 j0 i2 K9 W
   free(x_d);
+ i+ d: [! Q6 |# ?- u% o) _# M/ D
4 \# ]- w# [/ O* m$ {: U9 {使用DSP侧单独调试功能,验证动态申请没有问题,
# B7 I6 B+ A" W. i$ b7 K. l( N- R6 O# {9 ~; Z
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
: f. X; V. o3 h  M

6 y, m) }  x/ K: g# g- `3 P
" D$ b+ g, P  ~! L3 R$ O2 b1 e8 l- a/ w! V: ^$ V: n* }* [! R. h, [

1 J( m& _5 `3 t3 R7 w9 v; U- p/ p6 D+ \" c1 L0 g" `  n
  }7 h" P0 z* J# l2 \" T. D! M

) z3 _! k, J% Y, o1 S2 Y$ p+ V/ ~6 g5 q  o+ ^& {
8 m: O$ U% c# S& F  ~

9 A7 H9 X" z; {$ n! C- u3 c8 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* j+ z8 P8 r9 M  j( n0 P0 r我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 q$ ~$ \1 G! t* C8 [1 A- |(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- s1 D. F& {% ~) E1 M3 P
' I" L  ^  ~% K' X0 ~% p0 z
是不是需要在DSP.CFG中进行配置, x+ r, o; L7 t; r- @
我现在的配置为
; q) p" C$ I6 I8 _, D& ]6 ~: Q0 j( K4 ?/ B* R, \
/*
3 g( p5 l- r+ k- {2 h2 C *  ======== Operating System Configuration ========; t" v, ~( H+ u9 I
*/' L; E/ Y  m% L( K6 L/ A

$ v* l- w* ?! N! t" f  z" n! F/* no rts heap */" f' E! j7 V! n7 E- s6 x# b
Program.heap = 0;
8 b: q) s/ ^( d* u8 _Program.argSize = 100;  /* minimum size */
* _! o1 M! [% ~8 CProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 W3 G* H( m, p2 D$ i, y0 W" r; q8 G% |9 |- h, q) Y
/* create a default heap */
  N; L3 Q5 n! y0 r, `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% k3 H( G  h. G4 ?0 T1 E
var heapMemParams = new HeapMem.Params();% v; R9 i7 K! y, E/ ^% ~5 N% x
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& _9 Y4 S% d: R5 H
( u/ v( J: ~2 S* v6 \; D
var Memory = xdc.useModule('xdc.runtime.Memory');, K5 J/ k$ E0 N9 t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: ]7 e) M. Z' n
. E$ C6 `, Y  D9 f: H4 H* U/* configure System module *// }! t! B/ g1 w: c" l( q
var SysMin = xdc.useModule('xdc.runtime.SysMin');3 t. e6 B' U  X- Q% Q8 Q2 [; P
SysMin.bufSize = 0x1000;1 h! h7 P" v( k8 C8 J
SysMin.flushAtExit = false;; I  d9 W9 Q# U: L# {7 Q
3 E- U; F* g$ I) F
var System = xdc.useModule('xdc.runtime.System');
! M6 A6 x, c, E- r7 gSystem.SupportProxy = SysMin;
+ }- E+ K' N' O! h
7 \4 J- F$ n7 H: B: p: V5 Y/* configure SysBios to use the lower half of Timer 1 */
8 x  U& C9 `0 p# e3 Avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ R& m; ?- a, c9 X8 x. Qvar Clock = xdc.useModule('ti.sysbios.knl.Clock');3 d& V1 T, @0 j0 B/ ?. K& S
Timer.timerSettings[1].master = true;
; h- s1 O% x3 B- uTimer.defaultHalf = Timer.Half_LOWER;
' l1 |: G9 W- p' z# O, g) fClock.timerId = 1;
5 l/ d9 R* i* L3 E- I. e# Z7 N" Q& ~5 n) g4 n2 q. q

/ O) v4 W& `) y6 C4 m9 t/*
/ ^6 [& \. R$ w' ^" u *  ======== Miscellaneous Configuration ========
. ]8 s. Z0 Z6 q8 B$ T */7 d& m, L/ N0 s2 I/ c2 w# B( \3 D1 A5 h& u

4 H: V5 _" \6 G* P% r/* set default diags mask */8 m0 b) I1 G7 L& T8 y" z3 L3 j, J
var Diags = xdc.useModule('xdc.runtime.Diags');# f) }: T* J: v9 n' A; n" D' j
var Defaults = xdc.useModule('xdc.runtime.Defaults');
0 B! Q$ J# \5 b. Y  `7 M$ G4 q* ^3 _. o+ ~
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: y$ z: k5 n# T2 ^
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ q6 V; m+ v* @7 RDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 F( x+ Q) {3 |Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 n2 O7 \  T9 k6 E
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ ?* K9 Z- b1 I) m9 o7 TDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
, g) c, `  O6 a- B" R6 ADefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 k) H- a' P* W8 K/ UDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;1 @/ v% e. m( o, E* F
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ h* s! h* S! V2 f  ?Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! J4 O% g0 K3 f. D
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 J( J" w. v" h: G
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  a! v# Z" f1 l4 ~5 K. g% L8 Q8 w8 eDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 s" ~  _2 ^' N' m; @3 Z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;+ L# }7 J$ D3 `" r3 ]) e6 |! H8 m
6 U: D, [5 f2 _; z" ?
/* override diags mask for selected modules */' g. Z) n% C5 q: n: c" v9 L
xdc.useModule('xdc.runtime.Main');2 |1 h2 t2 s1 _, z# K
Diags.setMaskMeta(
- Q0 `$ d. N: r* L$ z    "xdc.runtime.Main",
3 f8 a5 e# C, k6 w3 a0 @    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 H+ V" Y. N5 R0 R    Diags.RUNTIME_ON3 z4 c. }& K' c. J/ F0 O% @
);+ M9 T7 S. V  A! ~6 T/ W
; W2 z2 z/ j; Y  b, W, ]; @
var Registry = xdc.useModule('xdc.runtime.Registry');' ]3 [0 X6 g) M# v6 O0 I/ r
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* l7 s2 }. ]7 o8 A# ^; d/ S9 E
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: L: N, ~- A, Z3 z
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' {. R' {% D6 gRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 h7 W) y9 q! I' g. c* Z5 [$ I1 Z5 {, f, ~/ N: x' A2 ~/ |$ O+ u
/* create a logger instance */. Y' V4 g8 A1 K* o9 c3 L* ?
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
* R) L) D( K" Ivar loggerBufP = new LoggerBuf.Params();
  ^) x8 M, v) a. `loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
3 d6 A0 y$ d: O0 D0 J8 `9 i6 O. rloggerBufP.bufType = LoggerBuf.BufType_FIXED;& S9 R7 s! Z+ b7 \* m% N4 j& u
& k6 k0 q) H) V$ P, ^
var appLogger = LoggerBuf.create(loggerBufP);
8 f. `" q8 v2 \8 lappLogger.instance.name = "AppLog_Core1";
5 g: V2 D' i) R" p5 `Defaults.common$.logger = appLogger;4 O. h0 c. _$ D8 u8 A
Memory.defaultHeapSize = 0x8192;    ; f' e! O9 {; z
Idle.idleFxns[0] = "&LEDStatus";& y# a; b$ l- ]# v; J7 y
Cache.initSize.l2Size = Cache.L2Size_32K;8 {$ d# P( u0 c. R/ S! Q

( R0 I# b8 {  x/ l
回复 支持 反对

使用道具 举报

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 */
, K. I) ^; z$ _/ O9 K$ g: q. Yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) M3 s+ o5 P5 K# f
var heapMemParams = new HeapMem.Params();/ `, A% \0 {+ b/ t3 J8 c
heapMemParams.size = 0x4000;  W* h$ K) V! L6 F; e, ~
1 r! M" ]0 ~! |: H4 N) L+ \! b
var Memory = xdc.useModule('xdc.runtime.Memory');  W/ S8 W  |% O% a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: y$ P' ]! W2 X; X  L% M* R/ q; D& h
我大约calloc  每次共计大小为5K*16bits,
2 S+ S& B4 }! m( T8 o5 O" g; B而默认配置才0x4000、需要改大。/ z( }+ w9 \, v6 `% |* v2 ]

0 X: R4 }+ g6 _! X4 l, Z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
2 K# u" s5 O4 m+ V* A% _. P. eProgram.heap = 0;' L  O; @+ v: q3 e
Program.argSize = 100;  /* minimum size */1 u. y5 A3 ~& [+ k
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-13 08:38 , Processed in 0.043652 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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