关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

& G  X$ s' c8 e    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
7 h0 u2 I( o0 \' s5 ^5 |& E* B2 z
其他程序段。。。。。6 Y  p3 ]9 V; Z9 O# }) U

8 j8 z2 b, \5 k# N+ C/ x" p   free(x_d);
8 K9 \% a  O# G7 k
) C& d5 y' X& d( O使用DSP侧单独调试功能,验证动态申请没有问题,
0 z1 S: S8 Q$ i! _. O% ^. g; R/ u! i3 q7 `4 j
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. ~! P, [0 M- F! L, T9 m* Q
: Q5 L5 C: B& O3 v6 J4 }$ ]
+ C; l5 ~! w, W9 [' Q! T$ W

, D; |! G) y/ G  l/ j: F# X! p% k7 E* k$ u
. f4 O, b6 `3 Q& b' \7 S8 Y+ r  `
; s+ h, O+ T* ?& d! h
. k" w* [: i7 q, g: e$ f9 @3 h

6 C- J8 n2 H" S( S( ?* v5 H! i# ~- z. r

/ e& F5 h! H* x* l8 {. Z3 [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明5 B$ V9 N& s2 ?4 y9 b! c. Q7 h+ R+ o
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! I7 D& [( G2 g" j; X(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 z6 ]. B7 O; k; o* V
) N0 F- {, t, J, H( x
是不是需要在DSP.CFG中进行配置
3 N) N/ o- v" ]3 ]7 _: s8 y我现在的配置为
7 C: b7 ^' }- \4 E3 q4 M
5 m  j( V6 J, H/ a* \4 a+ Z/*% U/ Y) c0 {) J* k
*  ======== Operating System Configuration ========
3 z% l6 D; A  [" Z) G */
# A& w8 [$ Z7 ^  j% G/ ^1 s: E, j
8 N" I  t$ n3 b1 c/* no rts heap */9 ~7 S1 y& `8 ?: @! p$ m" u
Program.heap = 0;
8 u3 D) R. C5 J% iProgram.argSize = 100;  /* minimum size */3 s4 s+ u, u& {1 r
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) n0 ~$ `, g9 P0 ]5 l
& V; c! T/ T: ?9 {6 N" [
/* create a default heap */
, g. z' V! c6 Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  k+ y0 l" E6 g3 i5 w4 g, B
var heapMemParams = new HeapMem.Params();4 b: K  @5 S1 \& e6 y4 ^
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& c; t- b5 F% e0 C* M5 J: L9 r: ~
# X1 P9 P' I8 Q' W/ o
var Memory = xdc.useModule('xdc.runtime.Memory');/ {! X" e5 ^" o' Z/ q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# e$ }1 h9 t9 c  n4 r1 I+ e
' j# t9 j% U  ?, |+ l3 t
/* configure System module */% |7 U2 C4 l" j# f" |
var SysMin = xdc.useModule('xdc.runtime.SysMin');
/ R6 ?! X$ X( ~0 N8 Y8 fSysMin.bufSize = 0x1000;
' ^2 s( b! m0 FSysMin.flushAtExit = false;
, [) h1 n9 G. h6 @
* t! \- \0 U+ u- x7 Y0 o$ z$ yvar System = xdc.useModule('xdc.runtime.System');
# @( f- z+ ?+ J  ESystem.SupportProxy = SysMin;
5 N3 x6 x4 L% Y) r) K0 l" X2 K5 y
# Q; `: `, b1 ^6 e# o3 ^/* configure SysBios to use the lower half of Timer 1 */- V8 z, V' j) C5 `+ p/ J2 L4 E
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 t8 E* `; j1 e: P- I7 s5 o1 i
var Clock = xdc.useModule('ti.sysbios.knl.Clock');3 v' N7 N# M% @% W7 H6 {
Timer.timerSettings[1].master = true;
' B* w$ s3 H  s; s3 P" R* G( }Timer.defaultHalf = Timer.Half_LOWER;
& y9 W9 K; v- oClock.timerId = 1;- a  |$ x0 k9 a& R9 l' }
2 u0 B. k3 r. y
! [! G* v& i! l7 U, N$ d
/*  E3 `1 _  l* [
*  ======== Miscellaneous Configuration ========
1 Y+ b+ I$ `! ^ */' c  k- h& W/ q& |
+ F/ e( r8 g; P) W, N: r
/* set default diags mask */) }; i5 ^. Y) x% s( k8 G0 Z
var Diags = xdc.useModule('xdc.runtime.Diags');: s/ }2 U0 o  I' `
var Defaults = xdc.useModule('xdc.runtime.Defaults');- ?9 @; X4 e, c0 t
  _9 a, ]2 h- t8 M8 p4 c
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 H/ \- G  z6 d5 W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, I3 ~) m* O& N7 E0 H* g6 t# K) _; m6 zDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
/ o1 D. q! u/ H" A7 v9 x) tDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  @4 l/ [& p, ]& i# R- @% o) ~2 m0 `1 cDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% x& m2 Y7 |% h8 i- c
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;' ]9 ^+ l8 m+ @6 f, y9 ^
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 w" O  N+ a; }2 |9 fDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 ^6 [% e8 [2 U1 c) C4 m7 FDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' q0 ]* n9 D. m7 K
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& W* I! Z" z5 m2 a( ]; z- oDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;: a) S; B& p0 s' C2 y* P2 O
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( V& c  p% J. A' e8 lDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
. [4 R* U8 l# _5 M* YDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 H& N$ |0 [3 C& t& A* l

7 ^0 i+ t& Y; n0 {" w- ]% z4 g/* override diags mask for selected modules */
8 ^( X8 M: F0 s* d  s0 Sxdc.useModule('xdc.runtime.Main');5 `8 r6 C3 ~1 x8 z3 x1 w7 j
Diags.setMaskMeta(& x! D% X3 i2 t8 D  ?
    "xdc.runtime.Main",$ L" [3 g/ E" M, \9 A5 p+ C8 b
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 _5 j3 _+ {  c4 h    Diags.RUNTIME_ON+ X. T+ j& b6 c% c, C5 I1 E
);
6 C3 t3 F7 f2 K+ W! T% A3 [- Q$ \8 g- i" K
var Registry = xdc.useModule('xdc.runtime.Registry');* R. i$ \( G' r6 k1 ]$ v3 K- z
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. T, _7 w' }0 f
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" d- @) x5 M- s' M- }/ R
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, j( {2 N/ ?% N+ O0 V" F* |, _& {Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;- N9 ?/ }0 W4 n% X1 Q
- p) }/ J" F9 B4 F9 L. X
/* create a logger instance */
+ p* K  y' }  X. J- Jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 L1 F. @: M( Q
var loggerBufP = new LoggerBuf.Params();
* n6 I, W  T4 qloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 h. J$ {/ K2 m+ eloggerBufP.bufType = LoggerBuf.BufType_FIXED;" O5 k: Z6 w2 X( n& G3 }

4 J5 e' e9 N2 cvar appLogger = LoggerBuf.create(loggerBufP);+ n3 u3 a; K# t. \
appLogger.instance.name = "AppLog_Core1";6 v8 @* \+ `$ z. ^( h( n
Defaults.common$.logger = appLogger;  q5 s4 c9 A' c0 d- |
Memory.defaultHeapSize = 0x8192;   
4 E! b( q: j0 e7 I5 P7 x  EIdle.idleFxns[0] = "&LEDStatus";! Q+ b$ M, @% V; h- ?# B# W' ~
Cache.initSize.l2Size = Cache.L2Size_32K;
7 C8 W; _/ [, E' l. s- W' P5 z8 }  E1 A4 B: q
回复 支持 反对

使用道具 举报

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 s+ F& T5 v' g3 \7 R
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! k/ X  L4 }6 n1 N2 I( avar heapMemParams = new HeapMem.Params();
+ n) n1 M( F  u. y2 h+ _5 e7 qheapMemParams.size = 0x4000;
+ {, Y! f( r# b3 `9 j4 u3 G
6 d3 o# N$ Z& N; c$ l% kvar Memory = xdc.useModule('xdc.runtime.Memory');; s4 ?5 V) [( w4 d4 u2 R8 H# l
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: T: `$ I/ I; K

+ x3 T/ h9 N7 Z: X6 ?5 y我大约calloc  每次共计大小为5K*16bits," C3 \3 E0 ?" {! y  p- v& b7 E7 l
而默认配置才0x4000、需要改大。8 o6 c+ d- y  P8 F0 u
$ g% I* A0 E0 ~% F
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */5 d: |: e0 {0 L9 {0 m
Program.heap = 0;
4 c. ~. |" S$ l! j9 j1 t) t% zProgram.argSize = 100;  /* minimum size */
4 `7 b3 a7 Q' O4 ?" vProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-6 19:33 , Processed in 0.041921 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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