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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
- q6 u8 ^8 Z) ^( D
. }+ l& o3 E: i    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; a0 n' w0 s* j9 @+ z6 X0 h

8 [8 {# o# c' a2 C/ y+ ^3 x其他程序段。。。。。" T( U$ Z' V6 c) v' n' X6 f

3 ^2 e, s! w4 j   free(x_d);8 g; U- K4 w4 K- l/ L
( S- W2 S. }3 P: K) n7 Q; d4 _
使用DSP侧单独调试功能,验证动态申请没有问题,
" |3 w; H  i8 s1 C! ?1 m
1 S# c5 T1 |3 Y7 \1 u但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。$ w& z% S/ ^8 r

" t$ V* o/ s1 g+ F- ^8 Q8 a# V6 E* i$ v( V

7 ?. m, t" H1 ^3 t, t5 U) h* H6 X6 C7 F
4 w/ T6 U/ @4 j0 F( P

1 S1 \% v9 D, L7 g, h0 X' ^$ ?; ]/ m7 T8 Q: C9 ]" S

( C! F) f- y! M% d
+ M4 X) W# O  G5 e. Y6 f% b( H6 }" {" v2 ~0 T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
' r* J" d5 W# Y; @/ e我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; c8 d7 W, z8 `, D- }8 ^+ n
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
3 I1 W' M. ]! N, o0 u

# x; l+ o0 c  b+ y. l, o是不是需要在DSP.CFG中进行配置
) W+ D: H8 M3 w5 H) A9 F9 H我现在的配置为
1 L2 a' E1 u) v& M+ B9 O7 s
2 M; J& Q0 @/ Z% ~9 @% D4 E. w/*
! t# P4 @: l4 }4 y" V: F *  ======== Operating System Configuration ========0 B& C1 z- t$ b3 z# U
*/
9 T. }: }, K% e, s8 x- g8 i# v7 i
9 l2 U5 {* q, [7 N/ y/* no rts heap */
' f' }& x2 ]' h% V, E4 t! v+ yProgram.heap = 0;' p9 a' W) m6 N* C. ?7 J
Program.argSize = 100;  /* minimum size */& F  ?6 ^* K" h7 T6 h8 n4 H7 X2 B
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大# n! c* Q  S5 U- E$ @9 K
8 Q2 T2 b+ E; a- e" r) B8 L7 q+ n
/* create a default heap */+ l- R/ h: R2 z- _$ P) J8 ~
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& n% w! \& ~8 G6 C1 P$ O0 h  yvar heapMemParams = new HeapMem.Params();8 ~) s* P8 T* E  l  H
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) D. Y& s# K( J5 Q3 d4 |

0 x8 p7 b# \$ [, J+ w+ p  ]6 z% Y
var Memory = xdc.useModule('xdc.runtime.Memory');
; }* i2 E( _0 E/ N1 vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. X7 Q( g& Q% t2 V" S5 C
3 V4 R/ @. u8 {& O3 ~) |4 W4 V; \
/* configure System module */
% [- m" O5 b0 j9 U$ W0 V# E# Hvar SysMin = xdc.useModule('xdc.runtime.SysMin');
. y1 s0 h5 A9 e0 y% |# r* `* uSysMin.bufSize = 0x1000;
9 k; B) f. }" w; `) Y' d, W5 R# PSysMin.flushAtExit = false;/ n: s9 s  M9 A9 ~
  V" s( ~; e" o
var System = xdc.useModule('xdc.runtime.System');
: R3 A1 A# z$ K  l# y2 zSystem.SupportProxy = SysMin;: P5 p9 h. V$ N/ \

6 D* M* d7 d7 H3 I) @$ X/* configure SysBios to use the lower half of Timer 1 */6 V5 S4 N, p8 T( o2 s
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( `+ t  f" u. v7 V# }
var Clock = xdc.useModule('ti.sysbios.knl.Clock');4 z/ C* K$ Z  ]: m
Timer.timerSettings[1].master = true;
3 H( E# e, t) |% t5 q/ a/ T  W7 KTimer.defaultHalf = Timer.Half_LOWER;
- D6 E* [, W, X  L$ [) n( yClock.timerId = 1;5 G7 m; m0 S5 z2 {+ c4 h% l3 o

7 O2 W5 y; o, v7 H+ v  a4 l/ E$ Q% U
/*4 J+ P( W  I. \" `
*  ======== Miscellaneous Configuration ========' R2 S6 D9 \6 E9 j; {; f% N9 J1 \
*/
; X. ]* N7 x, z) @% [( E' G& j: n2 ?6 G$ Z
/* set default diags mask */4 b" ^" b5 u3 T' W6 Y
var Diags = xdc.useModule('xdc.runtime.Diags');$ P; D, r9 g/ S  x
var Defaults = xdc.useModule('xdc.runtime.Defaults');0 D/ [, W$ I+ f! a7 e

& b: c# k8 a- r4 hDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 j' K6 `- e/ i  }+ R% CDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;5 l& g+ Z+ V6 c7 n' B
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: J1 s2 b( F! z# q, MDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% n5 i) v8 U! [% Q' Y6 q
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( T& n4 }. J8 V$ T/ F9 I: |Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;. P4 U' z# _, N2 \- _
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 K6 g! |' u! I$ U+ F: E3 a' qDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;! u' u' M5 c( [$ ^. ^* b* W! a
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! N) E: ^$ B4 zDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! ^: W# p: Z; P8 H
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- y% u7 k* Y0 B9 Y  m
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
) [& f+ F) O& ]* VDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' K: W9 \  u* \+ d5 LDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 o9 q$ M" O- @
8 P; W' }5 E) u; Q/* override diags mask for selected modules */
% M! n7 o+ J$ `xdc.useModule('xdc.runtime.Main');; J( h, K4 o7 [+ A- A5 E/ n  P
Diags.setMaskMeta(
  w" e2 A5 E; j; O+ A& ?    "xdc.runtime.Main",3 s; S7 m  |/ o+ p  H* }# A+ P
    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 o, \3 Y; b2 H; [# ^- q
    Diags.RUNTIME_ON9 t4 X) Q+ G5 m+ p! S6 D
);
: k6 A3 y5 N9 \" q! f  w/ Y; I  [8 T" g' L
var Registry = xdc.useModule('xdc.runtime.Registry');
8 x7 C5 k0 B( G9 l6 T& h& r. NRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ f* l& T8 f0 j/ t: F
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
5 r' E( Z: D9 tRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; j+ [% m9 J( g$ i( bRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;& _. Q0 O0 r1 U
9 \: l% B. [5 C& R" C* w
/* create a logger instance */- N8 K  t+ i, s4 m# x+ q* j8 ^
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; s7 E  ^8 a- z4 }% L
var loggerBufP = new LoggerBuf.Params();
4 N3 Y2 m& y% mloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 `" o% ~- e4 _loggerBufP.bufType = LoggerBuf.BufType_FIXED;
: o/ N4 x/ _& _0 q  o, p- I$ F! p* W( G9 w
var appLogger = LoggerBuf.create(loggerBufP);
% U% f) U. _  PappLogger.instance.name = "AppLog_Core1";
: e# ^5 ~  k% i4 L$ A" T' cDefaults.common$.logger = appLogger;
$ z) A$ p. I# ?. m2 N0 k6 B$ sMemory.defaultHeapSize = 0x8192;    % g" r  n* e& A5 V7 G3 r: f  S% O1 P
Idle.idleFxns[0] = "&LEDStatus";. i7 g7 K8 {2 {7 z1 j0 g$ X
Cache.initSize.l2Size = Cache.L2Size_32K;/ P6 q5 S9 K/ F1 n- v+ Y* g

' ~$ _9 b2 b: l& ?
回复 支持 反对

使用道具 举报

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 */; L# p- Q. R8 X" A* P$ D/ P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ `3 n* q4 x) xvar heapMemParams = new HeapMem.Params();
# w3 ?. V- S4 @* b0 ]) W) [heapMemParams.size = 0x4000;
3 M# L" W# P* k7 o- {7 ?4 a
% o  R' @, O2 D9 e3 y1 Mvar Memory = xdc.useModule('xdc.runtime.Memory');0 d3 h7 Y; r, h5 s, p
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' c; `0 o  ]% x  @% O. h% L
. l& Q9 B+ n( l( z- o/ L
我大约calloc  每次共计大小为5K*16bits,
$ g0 I2 y& x& ]4 {- Q$ `: |9 i5 D而默认配置才0x4000、需要改大。
% o' [# J/ o/ ]1 g" j* P& x4 P, `1 A# B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
$ I' @! p" j6 g+ FProgram.heap = 0;
5 a* m. Z3 M: Q8 R, l9 s- zProgram.argSize = 100;  /* minimum size */
, N7 \, w9 L8 q! H4 Z! QProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-24 17:54 , Processed in 0.042556 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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