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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构6 `2 h9 @& r7 |) x8 p3 J: o. d% v
1 w* J; c; ~0 |) ~1 b# L
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 A4 D: G& F2 h" `; ?" d3 T
# q. d' O. m, ~. t7 X其他程序段。。。。。
8 c- E* t- U% n7 j4 K5 p
3 D& q# _4 w( u2 Z   free(x_d);
9 w2 H- N+ ]( r/ c( A: g/ Q' p& \" Y2 F# M" a1 l
使用DSP侧单独调试功能,验证动态申请没有问题,
9 Y7 X# R) i5 b7 M
( t' M4 d* s, J5 D# Q/ m; b0 D但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! |) |5 E9 w$ Q3 C" t9 m

. U; c2 v7 r  Y7 _
  u- q  t  q' s3 U; u9 y+ v1 d* O" G! X) B; K% L3 Z

. s! J- i) G  Y6 z$ z6 `+ j4 c4 [5 c
$ V* O/ g8 ~6 |# t( V( @- g0 `8 \; r& q$ L' O

% u& x+ \3 o- y" p$ Z0 ]' n/ l8 t% E
- f& W7 g" w# [

. E0 k6 ^1 i1 Z0 P4 r7 ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
. f5 I7 h$ {2 U$ L) X* N我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ w1 ?8 ^9 z0 ~(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 q1 _  }- t( J0 h. G# g$ Z: G

; P4 D7 K% J1 [( i) u是不是需要在DSP.CFG中进行配置
: M/ j* C8 V+ \- W/ p3 N( \我现在的配置为
% i: j3 Y& g/ z- r  S" T4 p& @; o8 d) K/ t/ d
/*
' r' C" ]& P! M9 y3 p: ~) Q: D *  ======== Operating System Configuration ========. o5 ]  {0 X$ s0 u, w  C" y
*/5 I! n8 p$ n" X4 N$ z

- w0 v3 _; X& d2 S" E/* no rts heap */
3 Z) d$ Q" ^3 x+ h6 i4 BProgram.heap = 0;
* F/ j/ C4 q' n" k6 KProgram.argSize = 100;  /* minimum size */6 v& _# M# @8 o* x% `
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ R. r* }) B+ p. K2 l
7 z) S; G( z' {, s
/* create a default heap */
: g/ O* c* F! z3 E. R. Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( E& h' X1 x* z+ ]
var heapMemParams = new HeapMem.Params();+ n5 e; O- K& d% y  b" K8 o9 V
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 N( ?) Y) @+ M8 Z3 @: P+ [% x: k: u
var Memory = xdc.useModule('xdc.runtime.Memory');
! i( M  d# k2 @: a( `0 M% t2 u! K6 IMemory.defaultHeapInstance = HeapMem.create(heapMemParams);- i. ]$ W# ~, w& w! _+ y- L0 V

( H* o+ u; {2 p6 D" q% }6 {/* configure System module */# g+ S* |. {# |1 H
var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 H  Q% H. L/ W. k! F. I6 o7 hSysMin.bufSize = 0x1000;  E3 s# h0 P3 w) ?( P) S! D6 u
SysMin.flushAtExit = false;7 N9 p& n9 ^8 b* h' B$ Z
+ K0 X1 u9 j; }/ L
var System = xdc.useModule('xdc.runtime.System');
# e! d# n6 |& C2 q! fSystem.SupportProxy = SysMin;
1 X7 p( A2 W- S" Z3 x' K( i
/ B  j& B8 r( ^1 S4 _8 F& a' ]1 k/* configure SysBios to use the lower half of Timer 1 */
. P( U' a9 h/ Y+ i# j1 _$ Evar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 L* p- P" v' j
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
1 A& }% n3 }9 k- _Timer.timerSettings[1].master = true;
+ S5 {: i& a6 C+ l7 hTimer.defaultHalf = Timer.Half_LOWER;( L( m9 Y4 V" W$ [
Clock.timerId = 1;; o; `8 v# b" s2 Z* I7 m2 x

9 |2 A  J9 K: z5 G" G0 l& J+ L: P: N0 m. u; @4 w7 w% q
/*
6 x* m$ z; m3 [0 l$ C' h! x$ n% F( ^ *  ======== Miscellaneous Configuration ========4 z0 S- b' _/ |- D. U
*/
3 V) F. X( f  v& y8 l( ]$ X3 S) r4 f) ?# |4 g2 w
/* set default diags mask */# [# c' Y- {* }
var Diags = xdc.useModule('xdc.runtime.Diags');! }) m# b1 w' B. g! d, Z
var Defaults = xdc.useModule('xdc.runtime.Defaults');
6 a% D7 Y& I6 H+ B4 f1 e7 X
* X5 f# ]: O" `5 M1 iDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 W/ o7 G4 I+ w! YDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) ^' g5 J$ I# s1 GDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 J( t. A" d; @: t4 b( c3 ?2 HDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! S2 {  w6 S! BDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 r# c$ A4 q- o0 eDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ e- K2 [8 \: |' J# \/ BDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, s  b0 H2 Z, d
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 O, f3 c& \  F4 G" E1 RDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;4 X( O2 Q) g* z3 _! r7 \- T4 g+ o7 `1 K
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* k2 z" ~4 g( W3 w: A# IDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 Z5 \# q' D  B: s- q; z# ?Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' _0 B" o9 V/ d0 z2 g. s
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;& l8 w! O5 B2 {1 W
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ p- p' I5 e  k( X' o
6 Q! j& i* C: H. ?$ D5 [
/* override diags mask for selected modules */
6 E9 ?! M  l8 J' F( gxdc.useModule('xdc.runtime.Main');
9 g& l$ |2 a$ Y* ODiags.setMaskMeta(7 m9 t4 _: N3 r/ `
    "xdc.runtime.Main",
+ ]. f  X6 c/ q1 {, ~" |    Diags.ENTRY | Diags.EXIT | Diags.INFO,; H, T- `/ p/ \! M3 X8 n5 m
    Diags.RUNTIME_ON  Z6 t7 G, x+ f6 W" U( d
);
1 _( \: Y) [  K- Y
( N+ j) X; @. ?- [2 nvar Registry = xdc.useModule('xdc.runtime.Registry');$ |- {0 h0 [" B- I$ J' T
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
- e: G' V$ E6 A/ E: ]Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
4 E& Z5 l/ [! S9 T2 qRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;" y1 _" v2 W+ f
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 x$ h" m  Z3 _' x

2 X' w' m$ Y: P! S  P/* create a logger instance */7 z: m! E" Q( F4 Z# @
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) @1 ~7 R5 n" f! c
var loggerBufP = new LoggerBuf.Params();1 X, S0 u: h) _0 V* \
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. L- c& w6 `$ h7 b, hloggerBufP.bufType = LoggerBuf.BufType_FIXED;1 m; \( ]" ^7 [  K3 q
- w) U; J4 ~0 w. P
var appLogger = LoggerBuf.create(loggerBufP);/ n9 C, r( d! E+ c
appLogger.instance.name = "AppLog_Core1";0 B; ^& a8 H+ ?7 b* @  y" C
Defaults.common$.logger = appLogger;# ~; T- p( O* q, V
Memory.defaultHeapSize = 0x8192;   
- z: r  ]( N- g  k: yIdle.idleFxns[0] = "&LEDStatus";
! ~' T$ i" P% l  T6 ZCache.initSize.l2Size = Cache.L2Size_32K;4 X+ r- Y/ |4 g9 e# J
9 b. n# F+ W3 a8 b! a* c# A
回复 支持 反对

使用道具 举报

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 */4 u/ p( c1 S1 i9 [
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, v: ^9 _: ]; `0 I/ n- K* ?var heapMemParams = new HeapMem.Params();
8 ^- N) o, X0 \! w( ZheapMemParams.size = 0x4000;8 _, `/ T0 y* Z' J" a5 q7 @

  G* a% Y( [+ g0 H# v) {7 R8 M8 N0 |var Memory = xdc.useModule('xdc.runtime.Memory');% c  `$ ~2 V% V7 j3 s
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 I" M+ e/ [, C/ q- x

' j2 q3 K9 ~# J& E! P/ [" Q* K我大约calloc  每次共计大小为5K*16bits,4 x" g: x, {4 G" w# S
而默认配置才0x4000、需要改大。
- R/ D/ R1 |0 N% J3 d
$ `* C: m6 ?! f! B$ M
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
- _1 M- E5 F& Q- }Program.heap = 0;
5 K3 g  l' j( ], s. F; Y  `Program.argSize = 100;  /* minimum size */
5 h( I8 p) j* D4 l5 F! k2 x8 YProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-4 07:11 , Processed in 0.041164 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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