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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. L$ A- }. Y4 Y9 N9 o$ U$ E( t; }
5 z$ f( f  j! }! q. x. |3 f0 k    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ \. @1 M' e8 N+ j
: Q: y- z2 \/ |- D
其他程序段。。。。。
7 z! ]7 _  h; ?3 [
* R% {' r: [5 w4 P6 M1 @, O( ^   free(x_d);2 \# m  B' z' S; g

( @3 t# g6 H# s使用DSP侧单独调试功能,验证动态申请没有问题,
0 R0 i) p/ U; y2 m8 P2 z' Y+ A' H" f, B7 k) ~
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 j% v$ ?6 r9 K6 y- m- u6 h

* A% F8 ~6 X) R
) E# {5 N' h5 j2 E3 m+ t& K4 K7 E2 v3 }+ a

% A& z$ Y( O* t, f/ u/ e) Q! L! A/ b8 H! b/ B
1 L7 {0 _" y- ?  O" g; d$ ~, j
: D( _* Q( }9 Z9 q2 Y  n1 r
9 K3 w0 \) k5 a9 T7 ?) ^1 E( N

1 Q) }' T( f) ]4 I* s! l1 _0 f( I  K+ A7 }8 V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
2 _7 u$ y8 }1 Q* UProgram.heap = 0;
) r* w8 o) Z+ t- ZProgram.argSize = 100;  /* minimum size *// o& ]2 x- C- r- i; _
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */2 w& U' O) d/ C( Q6 r1 V& l4 S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% p7 E) V- C+ T
var heapMemParams = new HeapMem.Params();
3 u$ L/ p! o9 T* J' GheapMemParams.size = 0x4000;. L' H+ T; Y# U$ h7 M$ x4 }5 g
& Y* E/ j1 F8 J: D! v
var Memory = xdc.useModule('xdc.runtime.Memory');8 e7 d7 X4 k; A1 p: I" A
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 d' a, R; E% Q' C4 p4 P! N# s3 o6 N2 f( z3 x+ @
我大约calloc  每次共计大小为5K*16bits,
9 s, t$ Z% D- b% B/ A$ c9 z3 D3 u而默认配置才0x4000、需要改大。8 `0 c5 p) \+ B- `( L$ @9 @1 q: h1 s
+ B$ g$ B2 E- q9 R  r$ M( N! M
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明: c; f" g: a* H: S
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下. q% N3 ~9 m- R, C+ @( ~4 c6 K
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 a% M, N, j( n
/ n) X& r9 e9 R* o# w  @& _: p
是不是需要在DSP.CFG中进行配置
5 h6 k: N4 o& `$ g- M0 w9 }我现在的配置为
4 m; ^) w1 B  ?/ C! V9 L$ k
* V1 s3 b( C5 D$ q5 ^0 z2 m/*
5 \7 Q) W% ?1 X' F+ _ *  ======== Operating System Configuration ========
4 J% N+ g/ Y$ W. h; z, E */
+ Q1 d  H) W9 {4 y$ v+ `
, c# F% x- a8 c% D/* no rts heap */
" B" N5 W% c! w7 @" j% xProgram.heap = 0;- e! B% i9 Q* c
Program.argSize = 100;  /* minimum size */
; m2 y) l/ E0 a3 E1 ]0 F' RProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" @# G: g2 ?# Q/ o' A; g
9 A1 G: ^: z1 g' ^* y# h# r
/* create a default heap */: I: t) e" J. E4 |  c
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# [+ ^2 A5 l/ D7 G: Zvar heapMemParams = new HeapMem.Params();5 c$ Q+ ?; t8 S9 M0 \" }* o
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大4 H. X1 P( e- m6 n* K
, W5 q7 n* K0 J8 g: ~7 o
var Memory = xdc.useModule('xdc.runtime.Memory');
& _( R! a7 }0 X- H2 zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
: |$ R* c8 U# E" |! X" v6 j! W. I' u; d
/* configure System module */! G. o+ W; a; T  P  R7 f
var SysMin = xdc.useModule('xdc.runtime.SysMin');
5 I% ^. G" f; H$ FSysMin.bufSize = 0x1000;
+ r* [' t9 h% g) z1 P  pSysMin.flushAtExit = false;' j4 F# O6 B+ ?6 m, K

$ E6 I0 C$ Z; x1 H# u: O+ Evar System = xdc.useModule('xdc.runtime.System');0 A, y2 ~$ l" n# g& A0 R+ V8 w
System.SupportProxy = SysMin;  x$ M* H6 M6 T7 R8 b6 c+ f0 U0 ]

+ t; ^5 @9 x4 t3 m$ x' ~/* configure SysBios to use the lower half of Timer 1 */
9 x6 P2 F4 P! J' ~( j: Qvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');* \* }% |5 l% ~% ^: m8 T
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
) {7 M5 V2 h7 m# q; p: fTimer.timerSettings[1].master = true;  C1 p0 l9 i" W' P" u
Timer.defaultHalf = Timer.Half_LOWER;# F4 Y% E+ Z0 g& G. @0 }& o
Clock.timerId = 1;+ e& x2 c/ T' H0 v& @4 O
1 V  i7 I0 J  F& Z1 ]
: Z0 C! u" x! X0 L- w- W3 V7 L
/*$ [/ j! K+ Q6 j" q
*  ======== Miscellaneous Configuration ========: a2 x% V6 T$ o% [
*/
$ s4 _3 V( s$ o) u9 o' e! O
/ {) [. E; S. r3 X/* set default diags mask */
) ?2 D- o: t5 Vvar Diags = xdc.useModule('xdc.runtime.Diags');
% ]- F: z' {# [var Defaults = xdc.useModule('xdc.runtime.Defaults');
% F2 n9 `  N) l* Y" U% P. I- w2 E  U9 O3 ^6 E
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ O+ s2 T" {6 R9 s. n
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- d- j; b, `; s5 w' [$ J
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;) M; E- _" B( K0 L
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( X( V" h# K+ _9 `& e2 hDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# E8 M; P, `1 A
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. j' K/ b1 L+ g. c; FDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;& ^" m$ Z7 L8 g* [: `" o/ M+ C  Y
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 x3 K& f, m! M5 Z6 a. ?9 ADefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
; \5 D7 S& A" vDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  w$ ]4 ^# M2 C2 ]5 b
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* O) H! ^7 a7 ?1 F! x( ?( b8 EDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 R- r+ B9 K* \! n
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& M9 o8 y# }/ j+ q) v* bDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( e. I5 D+ N) n7 ^. x9 l9 ^+ m# e3 q- O( T5 E1 O
/* override diags mask for selected modules */
) i3 c: v" i& Q$ Uxdc.useModule('xdc.runtime.Main');  |3 l8 w' s4 u6 J1 Q' x* N2 O
Diags.setMaskMeta(. l: r1 }6 f7 F; c, z% m5 X
    "xdc.runtime.Main",. x" f7 m0 `8 G
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
. x/ c: f* F, B% x9 Q( c4 l8 m  |    Diags.RUNTIME_ON; K, n, V- s- s% e! [4 ~
);
5 e3 ~: `* q' g1 R" W3 s3 h3 ?3 b% D2 @7 ^8 s# d' ]- [
var Registry = xdc.useModule('xdc.runtime.Registry');5 i, ^- G( n" E
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ n: n; |- }3 e3 ~  C( Y
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, S4 z  B$ L% v+ y) t
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 u8 b! E4 x& aRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. k$ v( ]9 r0 r- `$ D' C2 r$ }8 o2 ]9 K
/* create a logger instance */6 t8 A6 u9 U- j' L$ g: v8 W, r
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
6 x3 c+ K- c0 [( V. gvar loggerBufP = new LoggerBuf.Params();
  {5 e4 V, T; a9 n2 |2 r( @9 aloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. z* j. |% H! m" ^3 T  jloggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 }; S* M" K' K( r; P% l( j6 _
3 `2 i& S; M8 ~6 b+ @, @( hvar appLogger = LoggerBuf.create(loggerBufP);8 i& D% \& G" N  t- I, R' ^
appLogger.instance.name = "AppLog_Core1";
1 i( R6 u8 }3 @2 q  z8 ~0 pDefaults.common$.logger = appLogger;8 r  ]7 z3 B: z+ H0 Z3 p7 P
Memory.defaultHeapSize = 0x8192;    ' R1 z9 P( I1 G- b& x3 o. G! U
Idle.idleFxns[0] = "&LEDStatus";
2 S4 p9 x9 C" x9 c: oCache.initSize.l2Size = Cache.L2Size_32K;0 \9 k& Y' {6 B6 j1 O+ ~& g

% c1 b2 o# b0 `# \+ I, j
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-21 02:45 , Processed in 0.043211 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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