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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构# e& }1 h7 h  ^0 i
, N5 U" H3 x' Z* F6 q( X
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" r( Y0 z3 N5 _8 w  S  q7 q

6 k* m$ T6 M! n! ^1 g* c/ V% _其他程序段。。。。。" E/ z- i' L! L: E& O
1 w5 J+ q9 M# {* E1 G
   free(x_d);
# e) r- n# G3 m/ m2 ^. d8 P- P/ S& d! x7 B3 }% J8 T
使用DSP侧单独调试功能,验证动态申请没有问题,7 O! j# d0 ]! z5 d
, J3 S. e! z+ D: n, X8 V( F0 i/ }
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- t5 p( l8 y$ x# P
9 H9 A% s8 q. q% H8 i* n; e" R1 t, O
2 I% r$ J8 D- {% t

. ~4 p4 H8 r- v% Q; R6 Q' e
! k& ?  [4 R+ h0 W  q9 K  j$ @( L1 J

9 X* x5 B: k6 z* n- X9 r1 y2 Z# w7 k6 q

" l8 @& c: m% `5 c/ m% F0 }, q
' V" v; @# _6 E6 m: }9 ]+ |' p
, m# \$ v" k8 q1 ~7 `2 Y: ~/ T( ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- M; b! Q2 n2 }# U  y2 N. O* x
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: a& ]: V" ~6 i3 |% p" k) T(不过疑惑的是,为何单独DSP仿真就没有问题呢?): z5 p! @' Z# b3 M" w2 N, I

4 r! ?: u' ~, N% ^. q4 E; h是不是需要在DSP.CFG中进行配置0 a" a+ V5 D0 A- r/ o
我现在的配置为* e7 ~& i! Q3 V$ p+ Z6 s+ C  U1 O  }4 G
: k$ \. D( ~. Z1 t
/*
. K9 \8 x9 O6 E$ r2 T *  ======== Operating System Configuration ========
- J9 w' ~  c0 w- @, e */
" H" v+ y, Z" s4 t! d' I
( k! h' V0 Q* O) \7 ^" K/* no rts heap */
: ]! j7 K5 _2 F3 YProgram.heap = 0;
" ]4 s  a2 e5 d( I1 d* H0 \* M$ O1 QProgram.argSize = 100;  /* minimum size */: v- r& Z1 f" l# W/ t3 |
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# y2 S  ~5 F) N1 q, ]$ a9 `9 N0 F
/* create a default heap */5 v6 H9 i1 x7 b1 U6 L
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 |1 ~' h2 G  k7 kvar heapMemParams = new HeapMem.Params();
  O; i% O2 Y8 B. z$ u1 X7 z0 MheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
9 L7 z: W/ a1 P! |) U# [+ I2 N3 Q
  l& h5 K- A3 R4 K* F& [0 G
var Memory = xdc.useModule('xdc.runtime.Memory');% U% R, s6 w. W% ^4 F6 w) `7 f2 `% k
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 P$ C  M% T& h9 U9 A; I

5 z1 [1 H( o1 b( E  r- I' L7 i/* configure System module */2 U* q7 p; d4 I* W  c
var SysMin = xdc.useModule('xdc.runtime.SysMin');
- g- e4 y- S! t, o8 c6 |SysMin.bufSize = 0x1000;& i$ n8 A6 z+ ~% r
SysMin.flushAtExit = false;
1 G; D1 v* Q2 l' n
* a% o: C' p; M$ i5 q# y: _var System = xdc.useModule('xdc.runtime.System');( J  d. C4 ]4 s2 M. W# A
System.SupportProxy = SysMin;3 y) v, [+ G, E* g1 o& l- O9 ]+ c% x
$ p) c3 a8 Y' `0 \
/* configure SysBios to use the lower half of Timer 1 */3 e, Q7 w6 |: @/ a. ?/ ~6 C% a
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 f% l' O, ~0 M- r' z3 Q/ S# {var Clock = xdc.useModule('ti.sysbios.knl.Clock');
# f$ q2 V, W% c$ i- @Timer.timerSettings[1].master = true;
4 F  r( @4 n) `Timer.defaultHalf = Timer.Half_LOWER;( `1 U: D* P# s8 d2 g; d
Clock.timerId = 1;- p4 `7 g7 B, r9 x$ V+ K  C
7 w7 h2 |8 V# Y8 M& ?3 U
/ s8 k4 L3 C5 a7 |4 ~
/*
4 S8 o7 S% _( g- y *  ======== Miscellaneous Configuration ========$ ^% A( l. ^, X* D* h$ I2 G, M
*/
% J7 @8 I" f6 c! |, O' g' u6 t; o; E/ i$ z2 i
/* set default diags mask */4 G' e( n! m# |4 D
var Diags = xdc.useModule('xdc.runtime.Diags');
, a: q6 N2 V6 W' N: p0 gvar Defaults = xdc.useModule('xdc.runtime.Defaults');0 Z2 j' b) q5 Z; E6 L

  \* n  N  |2 F+ t8 t( {9 \# rDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# C& x6 f) z* J4 ]7 V3 \$ Y0 Z
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' [! T. p+ l+ Y) X1 K/ L
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" p4 I" r. |% N$ P1 p. w8 P  m
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */; L% \3 G2 f# G, q
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- J9 z) q1 n! M9 ~6 J5 VDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;9 {* @) p& M. q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 i3 [9 P/ x1 j! L/ G
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  G2 C5 t) {: g0 ?: a& GDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
' K5 T/ h$ P+ R- x, v" t! PDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 X, a- L8 w" q4 K# nDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 L0 y/ V: o* q2 T& h& V
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
/ x7 _2 Q& ?: DDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# V) v- X; n/ S# y7 h
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) b: M: S8 L6 Z* e
( c8 I' M( n+ x. l( I
/* override diags mask for selected modules */+ n$ @1 C" }. K. q. ]. H6 q/ L
xdc.useModule('xdc.runtime.Main');- P" Y! t! K: E; I/ d8 ~
Diags.setMaskMeta(
. g7 h: h( w6 H8 k3 ~    "xdc.runtime.Main",$ h8 ?- l9 S. f2 E0 r9 X
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: A& g3 x* Q0 _. y# f    Diags.RUNTIME_ON9 X/ ~+ q1 \0 i9 |
);
% `/ b# w  i) P/ ?* A$ E* a' I1 h; o0 P7 S7 ]3 z  G
var Registry = xdc.useModule('xdc.runtime.Registry');
( S, V" E, i* y' |$ y$ p+ NRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
5 u- n# g5 k6 |5 j* `Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 Y# s+ j' \4 }" l7 S" a( f2 LRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;: X; u. g6 ^+ c' W
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;# ~1 c4 W% t: s( j; r

, S% b0 \/ g. s2 i- p' w/* create a logger instance */& \. K. F; K) [6 Y, x0 U3 w
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) y; i- X% N4 bvar loggerBufP = new LoggerBuf.Params();9 r4 H& |6 D/ v* v1 h
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 q, L' g6 B3 [3 T% g  lloggerBufP.bufType = LoggerBuf.BufType_FIXED;+ @: e$ m: m: ?
  ?( C/ o% R' B: W# [/ F
var appLogger = LoggerBuf.create(loggerBufP);
4 M, |" E* _% `1 t1 J1 B3 ?appLogger.instance.name = "AppLog_Core1";
0 @$ v4 t% H* uDefaults.common$.logger = appLogger;- r/ s/ ]. i1 Q) K
Memory.defaultHeapSize = 0x8192;   
; F5 t2 q0 |6 xIdle.idleFxns[0] = "&LEDStatus";3 g  Y: h) s+ T" m2 A
Cache.initSize.l2Size = Cache.L2Size_32K;
0 p9 B$ w4 }  V* L5 Z% V- y) d* ^% R, Z/ ^" b" f6 f8 H  Y/ ]! ~) J
回复 支持 反对

使用道具 举报

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 */: ~1 I' F$ C/ K% ?( D! i3 O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' n, J7 y+ v( `var heapMemParams = new HeapMem.Params();6 l: V2 g" |1 T2 B
heapMemParams.size = 0x4000;/ x& W( x% H( T. W! s2 {! h) w
( L% B, O1 v8 F) V" g
var Memory = xdc.useModule('xdc.runtime.Memory');
/ B" ?+ `' P3 u: z1 X  vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, z% I$ r$ a' ?" L* Q$ q8 z. E2 K& h3 y. `5 r# l1 S
我大约calloc  每次共计大小为5K*16bits,
. m( ]! T% C7 ^而默认配置才0x4000、需要改大。
, c/ U8 ]& U; `+ e" H0 r( ~% r
( L  f6 y7 p8 o5 l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */0 l4 \+ {! e7 S9 |8 ?/ O
Program.heap = 0;
; h7 W! G7 y- C7 U5 `6 w/ j0 Q& \- vProgram.argSize = 100;  /* minimum size */
5 s( ~' @. j2 k' h$ Q- h. aProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-3 22:44 , Processed in 0.047341 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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