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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
7 Q0 x. E0 C) {  d% J4 V
& i* ]8 s( H4 q. x) L" \, B    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ M9 |  |" Q, B) l2 C3 U8 a& V. d$ l
其他程序段。。。。。0 g( f  b4 c9 k# s7 E! a5 k
% R, J3 z* l, E
   free(x_d);
2 A; P3 t$ B2 G' h9 H' J
: P' d, c6 O3 k, T; z. |" H( R) H使用DSP侧单独调试功能,验证动态申请没有问题,
, e' \7 m, S/ Z' T
" q4 m* u- R( h3 Q0 K/ \% b但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ U; w3 w) t' Q0 z

2 I) m$ I) Y! x. t1 Y
' y' a7 T0 e2 V  Y, x4 r; F0 x( a5 N$ U; M) f2 D9 N% x4 ?& ~
' w4 W3 _. m$ m5 \/ G$ M
# S4 z# E  r) j6 g' D5 R2 r7 x2 ~
# L) G) `! w. }7 T& q' G3 \8 K
4 b8 m1 k! @* o; K3 `& y: K8 I

+ x+ D% h+ J; M. Y" `" U8 c0 m% a+ _  ]6 b0 e0 q# b  Q2 [, B

6 C8 M# L" _. F: o; I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: k, u( I8 B. L, k/ V+ V我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 n, w  a: b8 Q/ F" {+ t
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" v, l% r- l7 S0 ^! H
# W7 e# L% W0 G6 _9 _2 ]  W
是不是需要在DSP.CFG中进行配置
2 J( z0 U) p) I7 T" O5 C9 b. l  A我现在的配置为
7 S1 H% y, \/ ~7 h' K! Q& t7 g  n8 d! ?  C$ F
/** _4 m9 m0 G3 O0 i: B
*  ======== Operating System Configuration ========
, r. a/ _! F9 D. v- u) B9 V8 u( i, C */! G8 i, W8 c- X! l& ?1 A5 n  V
. l$ _2 |3 [6 i) |0 l5 i, A6 ^0 {
/* no rts heap */4 C" I0 r$ |: H; {+ Y
Program.heap = 0;
6 L* h/ w: e& m/ bProgram.argSize = 100;  /* minimum size *// C, h2 P" u; e9 E0 B% @6 B/ A
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 A7 e9 [% @  _& O
% `" S; S7 [' m+ x! v  G; b; l5 ~
/* create a default heap */
, x% y8 K' h& Y; k) qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! Z5 p6 B' Q8 @+ t" m$ f! o; Ovar heapMemParams = new HeapMem.Params();) x$ ~* C$ D4 G' G! I( G
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大. ?7 ~& a& f  c7 g
/ G5 }: o# b+ |* J
var Memory = xdc.useModule('xdc.runtime.Memory');5 I/ ?  l9 w% x
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ j7 D6 |; P  E$ F9 @
& N4 s8 F% \( x$ _/* configure System module */
2 _. F) I6 S  @var SysMin = xdc.useModule('xdc.runtime.SysMin');
9 W4 \2 \( q/ Z% b, x5 b& FSysMin.bufSize = 0x1000;
; J% W2 w3 n- W- j1 QSysMin.flushAtExit = false;, A9 [% @# }" T

2 g' C7 L& m$ j9 Gvar System = xdc.useModule('xdc.runtime.System');3 u) Q! q. `0 }3 u/ |
System.SupportProxy = SysMin;) V5 c7 R% {. B8 V4 b
- l" {" E% |& s7 K
/* configure SysBios to use the lower half of Timer 1 */. J( Z' S* h, x# e! Q. t' ~" {8 B
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# M2 M6 i6 ]/ {! z- G' O6 A9 c2 o6 mvar Clock = xdc.useModule('ti.sysbios.knl.Clock');2 ~! ^8 z/ }+ l$ T- U3 \$ K
Timer.timerSettings[1].master = true;
) N' H/ n3 `0 |! F0 t1 tTimer.defaultHalf = Timer.Half_LOWER;. F  e9 f- Z1 h9 D
Clock.timerId = 1;
$ \7 F3 k4 r: O& h
/ x6 d( t8 }( U$ L  Q! x; ?3 ~6 d% B
/*& ^! C3 ^$ P  A
*  ======== Miscellaneous Configuration ========
# ^2 L- T, F6 }0 m/ y7 Z */
6 B) X+ e1 V. k* K8 n
$ ~/ @8 Z+ h2 E/* set default diags mask */; N/ L$ x; [+ B: D# Z3 B
var Diags = xdc.useModule('xdc.runtime.Diags');' B6 M$ b7 @; ^
var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ e( ?6 F8 V' `4 ?) O# C8 s* g! y+ A2 H
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 c0 L& P3 [& ~9 y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. Z) \# F7 _! x1 HDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 @2 l- V0 v* W5 l% k
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 |* O1 U7 Q# a2 d
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 D! [0 W' M- t9 I/ g  gDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
/ F3 |& Q# ]1 dDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. F2 m1 h' t6 Q. @& h, [4 u
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
) M; x8 v  K4 P7 l, N& X# Q- N& r; N( qDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& I; d& L+ q2 s0 {) E& [
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 p3 W1 G$ j. |! a$ {# s
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
/ V2 _4 w) g1 [# T2 y7 N, [Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* q' [: D1 \8 ^/ ~Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ d+ X( X1 O" C
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ |! A) j/ x9 C0 L+ X3 ]: y: D4 Q
/* override diags mask for selected modules */
+ r# }2 M. g+ w4 p1 P( ~1 s/ |xdc.useModule('xdc.runtime.Main');8 S! ?( t: F% N, ~4 v
Diags.setMaskMeta(% s* w( ?6 K# Y! q6 e
    "xdc.runtime.Main",
$ n% @  q+ T8 q0 P$ P+ s    Diags.ENTRY | Diags.EXIT | Diags.INFO,
$ n0 M5 ]; [6 ]- X5 w    Diags.RUNTIME_ON4 g0 F/ O% o% t$ G3 k
);
( E5 G% l8 x% t6 {0 Q* ], k$ Y
4 U+ J3 N' Y! ~var Registry = xdc.useModule('xdc.runtime.Registry');% x8 [6 ?" @* u8 f; W4 ~
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  \" p  `* n5 j3 m# [' D
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
5 `. `/ s) ^( W# c' S7 dRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
4 K( S2 ~8 E  P+ f0 lRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;' m1 {2 \7 X+ L7 ^1 Q

) t9 U( ?- B8 _$ U$ m9 i! B' y/* create a logger instance */
. U, C& B) O. ]+ a* y/ c, \! z. Uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& I' z4 ^7 ?/ @; I3 d/ D& wvar loggerBufP = new LoggerBuf.Params();  y8 X1 ?! }0 ?8 g2 u
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 p8 Y1 C% q$ e+ ?
loggerBufP.bufType = LoggerBuf.BufType_FIXED;) A- v$ m( p/ Q( h

# \+ R6 r* Q8 X) k  m! J0 F  y+ |' kvar appLogger = LoggerBuf.create(loggerBufP);
2 ]2 g3 Q& v: V, QappLogger.instance.name = "AppLog_Core1";% z, t6 B% j1 E/ t& x
Defaults.common$.logger = appLogger;
( i1 L! k; Y5 E# d. H) P: x. uMemory.defaultHeapSize = 0x8192;    + W) B( M% v) G
Idle.idleFxns[0] = "&LEDStatus";
# w0 l: Y) c: L: qCache.initSize.l2Size = Cache.L2Size_32K;
9 g' v/ d1 z/ v' u& |. H$ @
6 B, w% R! S$ w9 ^* {; H" v# |
回复 支持 反对

使用道具 举报

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 */* f/ P: b8 h4 ~2 [5 z# `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 d" l1 g8 N+ _var heapMemParams = new HeapMem.Params();( L# r. c4 ]. e( A# F
heapMemParams.size = 0x4000;  n9 m+ S7 Q  y+ ~' E: @% n3 l* [
6 B$ V9 [) q8 T# r0 J; O7 \, ^
var Memory = xdc.useModule('xdc.runtime.Memory');) |9 g, ]7 ?3 N2 P# ^* u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 ?* z- M; I0 C2 G$ N

% O9 V& A9 b$ x* n我大约calloc  每次共计大小为5K*16bits,4 o- t: i1 Q2 [# b; w
而默认配置才0x4000、需要改大。) y3 ]9 C9 D7 o( y& G
) j9 g; q1 ~1 o- a/ P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 {0 j- Q+ U+ F/ E* RProgram.heap = 0;
5 Z2 O8 i& d1 ~0 P. \Program.argSize = 100;  /* minimum size */
' {2 n2 {& V* v( jProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-13 23:20 , Processed in 0.059668 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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