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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
7 W2 u7 A  c' M3 |
* U' Q* x6 J: H5 E/ a6 T6 {: I    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* L3 G- y+ u7 |8 [
! n9 u  A  K; R! |其他程序段。。。。。; Y4 O8 g; J" q/ `4 f8 r) c

7 A! K* Y! h7 T6 c2 ]   free(x_d);  c2 m+ o. B7 _! w) @* D
+ e3 O& V( e3 W% ~" y/ t
使用DSP侧单独调试功能,验证动态申请没有问题,
* T7 {/ h" q1 _
" m2 L6 c& U/ D6 k$ _$ L9 K; i) t; n但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: ^, \5 E! U) \6 N

6 X& t6 C. c9 ^- C# h! N' j1 H$ b/ t! ~& G

3 X! t5 ^; m' A) O8 w. I; F: u' B

: {, I8 L# V( I* e  t* Q
, O. m" b9 }- o/ O0 V9 i/ u- M: n" V) j3 [/ M

' U. o" [" A/ a* m8 G4 D% ]; n% q& m. \1 h/ |

5 b+ y# d( `1 `6 ?) c0 E) G7 ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 W: y5 F' g; t/ M/ L. ?" h7 q! j
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
# a5 O7 N9 S% f(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
  \4 m; ^) c( e8 X1 ?. A7 n3 u

  ]7 n- a& e( z* d1 `) P是不是需要在DSP.CFG中进行配置
+ [5 y& I" u" y& g" d我现在的配置为
8 K$ l/ H$ S2 D9 C% m/ K9 W2 J
4 `4 f( |+ w7 W* d% K/*
9 [0 @1 Q. C8 I) V* s *  ======== Operating System Configuration ========1 X! E) f  l8 g- @0 |; [
*/
4 X7 ?. J6 s( l& y7 D; Y: s/ r7 F# X9 [
/* no rts heap */+ d: z" L" S5 c+ B9 o
Program.heap = 0;5 K, [/ Z+ ~" Q4 q" d0 W; k: i$ k
Program.argSize = 100;  /* minimum size */
9 j7 E6 Y) U& C/ JProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
4 ], z% S2 d% L) I6 D) I% Z! C& ?/ h7 _+ }7 O( z! C* m3 ~9 x
/* create a default heap *// r, R( h/ I1 C% H5 K& R
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ J8 I$ l3 r( n% H2 `. N  G6 V! M- }
var heapMemParams = new HeapMem.Params();! B$ C  g& ?, w8 z7 r: ~' Q
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 w( A" [+ N; k7 @7 G" w
9 E" W/ b1 }0 T0 h4 R7 b1 \
var Memory = xdc.useModule('xdc.runtime.Memory');
0 _$ w9 D8 f/ h- b. X: LMemory.defaultHeapInstance = HeapMem.create(heapMemParams);0 S" f) c* e# q: L. V& N$ ]2 ^

' [% X( U& U; `5 ^3 Q/* configure System module */
9 F: g9 U6 J+ @: G, C. Y; Xvar SysMin = xdc.useModule('xdc.runtime.SysMin');
4 b5 _4 U% |# t# C0 q1 |# M( @SysMin.bufSize = 0x1000;% W1 x4 a# C( c$ f* z* D
SysMin.flushAtExit = false;
! q4 R$ Q9 Z  F! e* g
3 _6 [  i7 q. A* W% Cvar System = xdc.useModule('xdc.runtime.System');9 H2 T7 J+ N: b9 O" ]) }: v3 {
System.SupportProxy = SysMin;
9 g, i7 z7 c  X0 R  o- g. k
7 L$ L: r; k' Y! F/ W+ w0 P# x  N# [/* configure SysBios to use the lower half of Timer 1 */
6 P7 V) h- f; {5 s9 k- Nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 J( y  G, W7 s6 w, r
var Clock = xdc.useModule('ti.sysbios.knl.Clock');" l7 K5 e; ?8 y1 W) V
Timer.timerSettings[1].master = true;' v( ^# A7 B# T
Timer.defaultHalf = Timer.Half_LOWER;
2 |) y- y( o% r6 ]2 v) H; D9 kClock.timerId = 1;
4 j' n+ A3 j) _7 m/ Z5 s0 [! A
: ]" f! `8 E1 |! K
* `" T# O% ^- r  l% s) A/*: n; w, o4 i4 a" D( s6 @8 _( F$ c
*  ======== Miscellaneous Configuration ========9 ^3 j2 E+ b1 h& G, q
*/
5 K/ m9 T; R; C* z6 p# u( o. L4 ?( k" \" S% B) ^
/* set default diags mask */
, B3 v; `! l) yvar Diags = xdc.useModule('xdc.runtime.Diags');
; m! ?$ A+ w6 Gvar Defaults = xdc.useModule('xdc.runtime.Defaults');. N; d; s* ~, [9 W  @4 V- u

$ ~0 Q. p4 a% s1 I9 n( }Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
5 |  X; Q1 o2 t7 J7 @3 @: HDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% r4 Z$ H  R/ M7 S* s4 q
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 R2 Y" `% f, e9 ]' |, nDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- o9 v2 p7 r% S! i& T" GDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( ]: }$ p9 J( ^0 s9 y% z7 R" rDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 P! e2 @2 e# y* N9 D: I, BDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;0 k7 d  d4 j# D: X9 |
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 I) H3 N  N: t( N# b0 p' O
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& l* |! W( Y- T& C5 N
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
2 _. r( R& n& P" ]Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 c- m$ l2 p7 f0 ^* c  ^
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;1 ]( t  W( ?3 i* X9 w3 t+ f
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;- R- f3 C- c+ \' [- Q" l. h4 \: p
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, v6 w9 L! `& ]
- h, h! j3 `( V. A: k+ o3 ~: C) g
/* override diags mask for selected modules */* _" B3 m9 G; p4 f9 ^
xdc.useModule('xdc.runtime.Main');
. ^+ ]7 k* _+ ADiags.setMaskMeta(
* i" |2 `( Z  W, s* h* \. O! F6 D    "xdc.runtime.Main",
/ _" ^: A$ Q0 W4 B# @: U0 ]  b& q    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ {0 f: V) V- R; A6 _) m    Diags.RUNTIME_ON# C& {' I6 c2 A+ ]/ o/ v; q9 z
);7 {$ u; B5 g' s* {9 y$ C

& ?& Y( p* G3 cvar Registry = xdc.useModule('xdc.runtime.Registry');6 ^+ \" _, G7 X, V7 Q
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# s) `/ t3 [0 Y3 ?5 dRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* k- J+ d. D  N& X
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
$ O( u. i/ _0 e* a, p3 ~( PRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 q& P0 }" V/ a: r5 [
& e' D6 g( ~* V/* create a logger instance */
& L5 I  R- l. I  Z5 hvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');0 e1 \3 r. h) e) b: w4 B
var loggerBufP = new LoggerBuf.Params();
" ~7 m4 C: M7 R/ G' XloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
+ u4 x2 K% w- ploggerBufP.bufType = LoggerBuf.BufType_FIXED;
# t4 b5 S+ K( x+ X
( M, U, x/ X/ [var appLogger = LoggerBuf.create(loggerBufP);( ~  @: u2 _8 B: Q0 W( m. Q- O
appLogger.instance.name = "AppLog_Core1";
6 j8 l. c9 i  F. y, uDefaults.common$.logger = appLogger;& f) F$ W$ e1 j6 P0 k
Memory.defaultHeapSize = 0x8192;    % o* v' O' C2 y# D9 V; @
Idle.idleFxns[0] = "&LEDStatus";8 o, c& b; m& ]
Cache.initSize.l2Size = Cache.L2Size_32K;. z0 f5 z$ f: e- c# h

6 m9 b4 m, W: s! e; w5 Z' I- z2 ^5 B
回复 支持 反对

使用道具 举报

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 */" [$ h: S* i, G; x$ C
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; v7 ~! j- e0 s$ F
var heapMemParams = new HeapMem.Params();
+ k" Y$ i6 b2 i' Q/ c, {heapMemParams.size = 0x4000;1 U( E0 _( ~# s+ @; W3 a, @* g

5 P3 }, k/ o9 D: {! u, }  ]8 N0 _var Memory = xdc.useModule('xdc.runtime.Memory');
, w2 B* D6 [4 h; D+ S; Q( k, h, CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% }4 C' C& [/ r$ h% v9 [( R
% ]5 d7 N! d8 \- X1 j( w. I6 ?我大约calloc  每次共计大小为5K*16bits,
* [, _+ `5 V: V而默认配置才0x4000、需要改大。9 w1 z4 [. x& D- \: {# F

/ i- i+ k- }' l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */' o: ]: ^( B1 T1 }  Q
Program.heap = 0;
, u% o: K, _. V! G: \# DProgram.argSize = 100;  /* minimum size */# ]) I/ z, _" k
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-3 23:19 , Processed in 0.041398 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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