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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

/ ?4 y: U" O1 O3 {, a    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
; B# |% D1 Z( }" P: S4 E( b7 l4 R1 h; P. T, \# C# t
其他程序段。。。。。# k( k" G- S  x6 F
+ p- U6 r4 S7 E# W
   free(x_d);
5 F7 ^3 K& j- H2 U4 I) d5 v2 D: E- ]# D; O$ n$ G. P
使用DSP侧单独调试功能,验证动态申请没有问题,
! M$ L0 `. u& K2 U/ G! r# x5 s; K4 ?. s/ m+ W' t
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 f/ q1 H6 h0 |3 [0 B
5 W% A2 c( w/ {2 J3 e
1 P9 i* ]2 D- Y! e! Z, P! [
7 w" ?* a* ?! \2 _
6 Z. J6 Q. i" N3 K3 Q

% `4 ~; i% y( F4 V" p) o
7 N( V8 Y/ b/ s
: [+ B& p0 x( j. J
& d- Z$ [% _" P% _
5 B% l. M+ u; \3 w2 O" Q
5 U4 Y5 k$ {3 M' B- i1 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
2 z; s" z; ]# B2 f2 j我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下* `2 F1 B0 s8 j: |1 F! Z7 M
(不过疑惑的是,为何单独DSP仿真就没有问题呢?). p+ M! r4 \  Y" F* E

/ P' K( b( h# ?是不是需要在DSP.CFG中进行配置9 L5 |* b$ {4 |- `# X
我现在的配置为9 C0 C: p$ }& z. k) E, ?
5 o% V. P; W) s# U0 |. R/ |
/*
7 J9 ?5 p, n  V# H *  ======== Operating System Configuration ========  D0 z5 h& I$ K
*/! @  X- o. b0 Z( q' y
; u% \+ @6 K& ]* B
/* no rts heap */5 t: P3 s" I" t6 ^9 v- H; Y7 }
Program.heap = 0;
" i# W4 S- P- ?' mProgram.argSize = 100;  /* minimum size */
% B5 v, Y( T1 Z* ^6 l5 |. EProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大& }& g7 b  `& M
  t4 K: I; O) P% T5 q
/* create a default heap */
/ R1 A; \% a- ^; G0 n3 K) gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 m1 g6 z) V3 t1 ^var heapMemParams = new HeapMem.Params();( A# u0 O" O7 A4 c% P/ O1 _8 x
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
1 b0 I9 E, W9 d0 N, ]* p% D# r# \8 V; X: q* _! F: o
var Memory = xdc.useModule('xdc.runtime.Memory');
& s9 R8 Z- s5 H. iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% x) X; P9 g1 K8 U  g3 G+ w2 d# l0 `7 w+ k3 m
/* configure System module */. o5 S. |/ u  w$ x7 b! x1 t! g
var SysMin = xdc.useModule('xdc.runtime.SysMin');
: l& }& b6 a" g5 k1 q. k+ q4 VSysMin.bufSize = 0x1000;
. Q- u- }* B+ @$ r# @SysMin.flushAtExit = false;
9 B8 d( }4 o  I5 ?- X# O
, ^* @5 O: J. O8 Yvar System = xdc.useModule('xdc.runtime.System');) f5 N( I( H/ M9 c, M4 \6 e% ]$ R
System.SupportProxy = SysMin;
7 T. u# S/ x8 A1 }9 E3 H5 T1 A. A$ |* B
/* configure SysBios to use the lower half of Timer 1 */
  b7 V6 R7 o1 }2 }' bvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 M; J: v& Q$ evar Clock = xdc.useModule('ti.sysbios.knl.Clock');9 g1 t! a" @1 F' t3 S- d' D
Timer.timerSettings[1].master = true;
$ _5 l$ e3 J5 G& ITimer.defaultHalf = Timer.Half_LOWER;
; M/ O$ C8 E; ?: u# }# j* E; b$ yClock.timerId = 1;: L0 f+ H+ k2 ^( ?6 Y

" K/ }7 e$ u+ |; E3 a+ ]: Y. ?; X1 s& a9 f( `# _' J) c; Q
/*& G' D" C2 V7 H: A% b9 D
*  ======== Miscellaneous Configuration ========
$ ?4 a3 `: X1 J0 ]; A9 ^5 t */
6 k2 F, i6 k! w8 G, c7 Z* @! t) q( `8 K$ B' C
/* set default diags mask */* u+ p7 O; S( `* R' A/ C: U2 V
var Diags = xdc.useModule('xdc.runtime.Diags');0 _: M$ t# ~. o! @
var Defaults = xdc.useModule('xdc.runtime.Defaults');! _) V2 G5 x6 j2 {# ^( K- O, z; I0 L

2 G- Y0 k$ W# R4 gDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* p- n( b7 k" e3 O3 l5 m+ t3 \6 e
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) [, n0 h7 U+ [! HDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;1 w* `3 R, @1 {& \' V1 {
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */" a# t$ o6 h$ H  Q$ U2 N
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 }7 ?+ b1 G9 q' T. x" \
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. |9 L: B6 t. k8 ]* PDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;" A1 d4 d) s' X  a% Y
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
- ^. P/ E  _$ \8 c: i; L* ]( hDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
+ \& }8 ^6 ^0 v8 v' vDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' `" _, g) |+ u' V; ~: BDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  p6 |& q' Q( ~1 v7 x) LDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
) W0 J' P! D. A* x6 RDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;- {5 j7 m  F; F7 x( ]7 L( S0 z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;; u( f9 X; ]! q4 K6 B' R

0 T) Q# m* Z* O1 D' b/* override diags mask for selected modules */
5 Y9 a! u) ~5 q8 X& v. m) Xxdc.useModule('xdc.runtime.Main');
9 d) O+ V# H2 w7 V% H/ _8 G2 oDiags.setMaskMeta() L4 n( b3 q5 V: y; |/ N1 U: r* {
    "xdc.runtime.Main",& |+ X: ^) Z2 ]; w+ t% k1 G
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: \6 ]8 n, E! v    Diags.RUNTIME_ON3 z: H' o, z1 {/ b* i/ y
);
9 r' A0 O: B* M" q  A' A0 ]9 I. {% D/ ]8 v, K
var Registry = xdc.useModule('xdc.runtime.Registry');7 n$ ~9 V$ b) S- q6 e4 q1 ]
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ [. D& l3 e4 ?4 k
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
$ n" E, D/ ?: Y' e5 x( ~" s9 M& PRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) `) R  j" F+ b9 S2 nRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
# T) ^( \8 o6 J4 P4 B0 V8 x
" D8 H1 X0 ?1 z/* create a logger instance */
4 k* Q- l. V+ X4 c; }, V% ivar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& B3 c) [/ U0 S
var loggerBufP = new LoggerBuf.Params();; Q) F7 B$ y% F1 @  n
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) `7 B$ T0 G2 E$ r+ w/ G7 t- }loggerBufP.bufType = LoggerBuf.BufType_FIXED;
- o2 K. V3 H& U$ y$ k1 w2 u! |) }; A. H+ m
var appLogger = LoggerBuf.create(loggerBufP);
& m9 H8 N" ^! Y! CappLogger.instance.name = "AppLog_Core1";
9 J7 d, J. q  C, ~% \Defaults.common$.logger = appLogger;# q( d. F! [% ^
Memory.defaultHeapSize = 0x8192;    % C/ R+ q9 D: s% m" o5 B- ~: s
Idle.idleFxns[0] = "&LEDStatus";& }% g# Q9 o9 f- N* t
Cache.initSize.l2Size = Cache.L2Size_32K;" e, ^& C; a2 z) l! a- b
4 V1 h# R1 d5 Z/ ~; e& a: K' X
回复 支持 反对

使用道具 举报

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 */( d7 g5 [4 K) w/ c+ l, r. N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 |; u  e$ M" }' i4 [% @2 S4 Z
var heapMemParams = new HeapMem.Params();
0 e/ \; _3 _; R4 X/ q/ I/ UheapMemParams.size = 0x4000;
! N% W9 U3 \6 k+ N* H3 h& t1 o% J, W, ]3 Z4 `
var Memory = xdc.useModule('xdc.runtime.Memory');
: X0 J9 ~4 c% M( M2 Q: h& \Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" S; f6 X/ A. K( B8 L2 F1 x- G+ j

. c4 o' B* o( z' I9 Z我大约calloc  每次共计大小为5K*16bits,3 l$ P3 |5 J1 N5 Q
而默认配置才0x4000、需要改大。
( Y+ c4 G8 w7 T2 ^6 I
  ^: E) h$ G5 ^3 S
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( u6 l. v, Z1 j# [Program.heap = 0;* g# K5 {3 o6 l0 O; g
Program.argSize = 100;  /* minimum size */
% V, ]& Q3 L  _0 y% e; S1 s5 C" cProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-5 09:29 , Processed in 0.042313 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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