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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

) Y5 U2 {2 ]; t6 `1 l6 E    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 u! v/ l% n0 s$ V4 R
9 w, t2 g6 Q- Q. G( W: H
其他程序段。。。。。
6 e3 @# ^+ A% |& U2 v. Z5 w' J: T % R! L. ~6 n9 q# t' \
   free(x_d);  D! T: g4 q( |! e
* z5 w7 l# G* ^
使用DSP侧单独调试功能,验证动态申请没有问题,
0 I! p: }! i' X. G- G4 v/ z! D8 Y2 |0 z: \7 P& s
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  O! U. \2 q+ f- ]' L. p
8 l+ a( f9 ]9 O- S3 z

; t; a: Y9 j  v% d0 u# n  K5 m4 U  {: D

+ Z3 w& u8 O: B
. T5 q/ V3 g; A) ^/ _0 Q6 B  e" `0 _( @3 Z7 c

: v) M/ v( E. T# }" C* D9 D
* Z3 x  u: k1 _% |" r" T" w7 V  j9 r) k9 W

( G! ?" p: r5 }, F1 N8 `" T, y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* F- u5 N$ F, \  y5 l
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
$ @: V% ]( \2 y4 g' y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)( ~/ P  z! ~; I

( x6 |; z1 y/ d2 u1 _是不是需要在DSP.CFG中进行配置
$ F/ k3 Z2 F) }5 K7 V我现在的配置为, n: F* b; \1 G% }6 Y

) i* Y1 @7 [4 z) b& Y5 G5 e" ^/*
6 ^) L& g. B. l) \ *  ======== Operating System Configuration ========
. r9 B. [. H" ~- ^$ C: I */) x) p$ ]$ I% u# s: \+ u
8 c" f7 [0 h% @/ D
/* no rts heap */% U$ U% z9 O1 ]1 _. g  b% A
Program.heap = 0;
5 Q% a  i' R! `1 y3 B7 _+ e2 \7 P, YProgram.argSize = 100;  /* minimum size */, G: j( w, Q) A' r' K& C% [
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大% q8 u9 ^! j8 b7 W2 P' B3 p

5 V6 ?4 e6 _" F$ \* b8 p+ \/* create a default heap */
  P  x5 q  N  m3 tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" s# I1 a& X3 F. \/ ovar heapMemParams = new HeapMem.Params();
2 C& p1 W& b( K% \$ P! rheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
* a6 G1 h) {* b  F6 q0 u+ ]8 V2 x/ f$ a' f- a- D1 s
var Memory = xdc.useModule('xdc.runtime.Memory');6 @0 s( ~/ o* Y# P( {. g  R3 H
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: ]% i1 j( J! p, P* O# g6 L
; A" S0 h- N& s+ ]3 p7 r/* configure System module */
6 F# q9 V% ^& s7 Rvar SysMin = xdc.useModule('xdc.runtime.SysMin');
; _4 M* G6 B2 L& RSysMin.bufSize = 0x1000;1 g; Q1 |8 r8 _7 y5 E
SysMin.flushAtExit = false;
6 R& h, Q" U1 l8 ]
' D% w. v, ~/ T: ovar System = xdc.useModule('xdc.runtime.System');
3 J' _9 y1 Z& j; M; xSystem.SupportProxy = SysMin;
5 G# R& s, |, a; O* F7 A" G2 R& G+ e  V* q3 j; [5 F/ _
/* configure SysBios to use the lower half of Timer 1 */7 H- l( U  [9 h/ o
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# V8 ]5 {9 S3 p. Bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
% M5 ^- R+ q4 f; JTimer.timerSettings[1].master = true;
1 B0 z9 }' r+ Q$ }% |! h  Z. J1 iTimer.defaultHalf = Timer.Half_LOWER;- i, N6 T) s! u; Y
Clock.timerId = 1;  Q/ N" ?+ t) m4 E

3 N+ X( J; O) o& G" X, D9 u" I2 O7 m" X+ N/ T
/*& f/ c2 X( Q! {% O. ]5 k2 M; P. B7 m1 }
*  ======== Miscellaneous Configuration ========6 C4 q- K, v+ \0 r
*/
. }& o: W0 z' M0 T6 }, a! o$ K# w. d! {6 c) t
/* set default diags mask */
! ^7 e! {) {' w  W* d4 x9 vvar Diags = xdc.useModule('xdc.runtime.Diags');
, P  F  Z5 f1 B7 z" t: L& pvar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 I* N2 A: K" d
) H: i+ F2 J6 C" n- E6 g) SDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% U7 h7 p  q" D0 [Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
5 T% z' Z" ]5 q0 v- k3 kDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 s- w. o& d( u: ?7 F; ]  ODefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 }! [# z4 L) x" |9 I: a7 PDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% w; f8 r( w) n9 L6 S9 b
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
, }, Y" `& Z. ?% `$ }1 Q+ uDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
+ l6 M# W6 G( f1 k* iDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: M6 ?" _' {" ?( u' W  k  _1 [; NDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: |5 q4 M) M: I5 B! p
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 r0 ^0 {  n5 E+ ]
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! w. V8 A2 ~/ P# k  R, fDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- p# f: |' G$ R
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
. U' B8 Q" D* i% B: o  G, UDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;4 f0 `2 m& M; T9 p( `. v; a8 F3 @7 C6 R

* W7 g; w2 u. v' Y) X# F/* override diags mask for selected modules */
; W& k/ z% H( N1 w/ o. xxdc.useModule('xdc.runtime.Main');& A. |5 h4 g+ N# H  f
Diags.setMaskMeta(2 Q" c# Y' I/ N$ t
    "xdc.runtime.Main",
" ?; p0 Y$ Z9 M9 c  j7 j" c! r# ~    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 r, d, c- `2 a7 Z: n6 a" |( b8 I
    Diags.RUNTIME_ON* `) `7 k! a+ b8 t# j
);
& H) X& w) K4 y/ c$ S" i7 B6 A* a3 `  c& U
var Registry = xdc.useModule('xdc.runtime.Registry');
0 v" ~7 w% _8 `: P! ~3 @Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 P) x0 L$ c' b; _Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;6 E3 v; P8 u2 S6 K- X4 M
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;8 [- e1 U9 m) m# v; Y4 J! u
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;  s5 P: Q% o, h3 N0 ?/ @
0 v! z7 p: f9 e1 B( ^* d2 O
/* create a logger instance */
3 H- r" J+ [  D5 s4 zvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');9 I& O9 ^2 w! o/ I1 x
var loggerBufP = new LoggerBuf.Params();
8 l+ t: z/ ~8 T' qloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ X& ]9 Q: G- e4 m+ }6 Q
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
# _9 m0 f6 ]( \8 U, _5 W  R: B: y+ |* c3 W4 m) g% o, B" o7 P( M
var appLogger = LoggerBuf.create(loggerBufP);
" M6 W4 p4 N$ _8 ]9 R3 c3 FappLogger.instance.name = "AppLog_Core1";# s* z( m: d- y# e6 h: s3 R
Defaults.common$.logger = appLogger;
* t" j* k2 c$ tMemory.defaultHeapSize = 0x8192;    : i" l5 }9 b) \  w# c! X2 F5 T, Z
Idle.idleFxns[0] = "&LEDStatus";7 H) E4 R% r- t4 n1 _) V
Cache.initSize.l2Size = Cache.L2Size_32K;. x. I. w( k+ P: m/ b% p
" ^" a, g/ N0 w5 r  y6 s7 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 */
- ~' [5 ]/ l5 }! T8 m' c$ \var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& i5 |- b; C. {var heapMemParams = new HeapMem.Params();
! E. c# m& U5 IheapMemParams.size = 0x4000;  R- B4 [( Y' z6 R0 r0 ?2 O1 Z5 C' v' N

( l* [* n$ M6 `; e. Svar Memory = xdc.useModule('xdc.runtime.Memory');  B" M9 S! \  [7 _+ m' c
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 h( z" V, i# u. V% e7 b
& x- i9 ~0 L7 E8 N$ f我大约calloc  每次共计大小为5K*16bits,/ l1 S0 B8 V* Q' R- F/ z
而默认配置才0x4000、需要改大。9 R1 b+ q8 g: i+ u( h
! _2 ]' ^: k* W, z) L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) ]) P/ a& Q# q, a7 n% o3 lProgram.heap = 0;
2 l8 u) O, e! z: ~) fProgram.argSize = 100;  /* minimum size */
% G$ R7 e! q$ Y2 @4 Y  y9 h3 V7 pProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-3 02:23 , Processed in 0.043949 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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