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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
4 M6 o$ `# g9 D& ]
9 U1 w2 j. Z' J( x4 F$ W# z% S    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' {1 H5 C6 M# r$ S- G

. Q9 ^/ X, z, m/ Z& X其他程序段。。。。。
5 n9 g2 o3 F1 u! \
( ]; @/ f- ~0 S9 }. t   free(x_d);' h3 U3 S$ _# M5 M
% }: x8 h) M0 S, j  a
使用DSP侧单独调试功能,验证动态申请没有问题,
$ f; W0 W: n, K* l" o1 G' P5 C1 N* j# _* [2 z( ^& |, C
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。  f6 y1 n: `! R  W5 D; o
. a$ Y- U; I5 I9 K' p
% x4 |, X  \( }8 u% Y6 J

0 y8 k9 n! |  _) F
# _1 ?0 x1 I: v3 P& S, w
, ]) L/ d. }, z9 \: h2 I
- u! U: X( M0 T. u( S+ c1 R0 `' A8 n2 j9 `% J5 z8 R$ |

7 U" P+ U3 ]: j5 k  j7 W! z8 ^
% }8 X: e0 P- l5 U: @
, ~. A: L* o& @5 S& q/ f1 p# n( M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
7 e+ U( m4 ?; w' J0 F. `. ]: h# L我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: ?% O6 S) |/ W* n(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( b  w; l, u5 K

$ t/ V! d9 T0 t* ?2 ?& ?是不是需要在DSP.CFG中进行配置
6 H2 \) q$ m0 j7 z0 v# L- e我现在的配置为5 `* Y+ }% w" C- P0 h% H
4 Y3 ]$ T/ y' ^' }* b' D
/*
3 o6 T! e5 m/ O' w' ?5 }2 g% { *  ======== Operating System Configuration ========
' |5 z) Q5 a$ i+ f# h- I */
$ T- v2 R# R! k+ S6 w9 e# b( ?4 N, d6 N
/* no rts heap */
; Z2 d/ k, s: o) |& PProgram.heap = 0;
  L" r- h! h) ?4 s& e  A4 l# GProgram.argSize = 100;  /* minimum size */- q+ o9 b: u7 X7 T% Y" R
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 Y# @% ~- l& }0 }; Z$ t. |

: w; x: x) i9 L$ G7 \/* create a default heap */
( S& b1 s& K$ J; h1 Z0 w! S4 r3 t# svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ G) T; r! y4 _. s5 J& M
var heapMemParams = new HeapMem.Params();
2 q3 q0 B0 L9 k& ?" fheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% b0 j9 ?3 [2 B/ P& |6 K. z

  ]' j& H; ~: {; D! j4 z
var Memory = xdc.useModule('xdc.runtime.Memory');% t2 y/ `* s# q- {6 K6 N& ?9 c
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% x- o9 O+ [. S$ o0 @% \- ]

& [" A9 D- x2 x+ v/* configure System module */# P) l- C  A3 B2 c' X4 y
var SysMin = xdc.useModule('xdc.runtime.SysMin');
$ U1 B' W9 y1 }, c+ M/ A8 C2 kSysMin.bufSize = 0x1000;
9 L3 D& }5 t( tSysMin.flushAtExit = false;
7 P6 G$ m/ `* f" M  r' ~# |* S
/ M) |$ n8 z( M4 x" j6 Zvar System = xdc.useModule('xdc.runtime.System');
7 s$ e  x6 O* S$ dSystem.SupportProxy = SysMin;
) e" K) Y1 e3 m2 F2 s9 Y2 `- }, q3 g
/* configure SysBios to use the lower half of Timer 1 */% r, U# s8 t8 V6 X7 }- O
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' M. h, |# d; M1 L9 z) m) X  @3 d& xvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 H. Z1 o" R- ^- b" m+ mTimer.timerSettings[1].master = true;2 V8 _' D7 t/ }6 w  H
Timer.defaultHalf = Timer.Half_LOWER;2 a; W  u/ G( B* W
Clock.timerId = 1;( m; D' u* G, n5 W

2 s, C& O- s1 X  \
( _4 \5 M6 R# R/ M/ R5 O/*
0 i7 N7 b! y0 |+ ?1 F/ m$ y* b *  ======== Miscellaneous Configuration ========
& _) p, @- \6 l) b% x *// _) R6 ?; ^9 B% ]: m

' x  M. F8 e- I- X9 c# h; \/* set default diags mask */
8 W8 z9 Q& G* I& Y6 a; R, k- m  a' Zvar Diags = xdc.useModule('xdc.runtime.Diags');, y6 Z1 D: |! P1 h6 m: {
var Defaults = xdc.useModule('xdc.runtime.Defaults');
6 N; L& o" P3 S8 h
9 n; f9 }# N! C. j9 S8 {* ?5 E9 ADefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;3 H  D7 d& @, Z% W5 A" s
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 c# l- I$ m! B) P4 ~. V, F# z) ^
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
- H) D$ B: ]1 S/ o( }( K( RDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 U9 L2 I2 n( r/ L! G! [+ n; i3 oDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ `: J* p) w/ i. p7 x
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: X, p$ i/ E7 e) b) rDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ G- L, y5 C+ f+ z: U
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 V2 R! }; G9 TDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;5 R8 T$ E3 y8 w0 u
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ r6 _& d4 l4 @
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 M2 }+ e% L3 z$ ]
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 y8 h& y- e0 V  V1 S3 ]' Y
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 g  I* a8 B9 J% V6 C
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 P" M5 O9 N. `1 U* c+ W6 @" h. C! y: T
/* override diags mask for selected modules */
; c% w8 M  h2 F3 N$ _8 M: ^- Rxdc.useModule('xdc.runtime.Main');
* A! ^2 @0 [; Q3 w/ q5 ^5 y7 S' }Diags.setMaskMeta(' \; x& a% i  ]  b/ X$ C8 I( q
    "xdc.runtime.Main",
0 w% o# W5 {9 J, Q" q    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: h- ~% I+ {9 r  V0 h- |    Diags.RUNTIME_ON
" W! b+ q" q7 h5 m0 q);
. v* l6 W4 H. D  B/ \: S" v! ~7 ]+ [4 J
var Registry = xdc.useModule('xdc.runtime.Registry');6 M7 a" f  B- _0 K/ G8 e; v0 r
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 U9 Z: o% A* Y5 ?
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 J( O. v! E0 B- |) B  ARegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 s% R6 ?6 F5 X& `* \4 Y
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 S& c, D/ T  D
: E' p( k' ]; B0 S5 D; s2 i3 ~/* create a logger instance */
+ ^" N+ ^  [1 u7 [: L- P. L6 yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
3 |4 E- _2 H  N" t) N1 gvar loggerBufP = new LoggerBuf.Params();
# k) a/ E; e! I4 hloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 E% q, a3 B, z1 v  C$ o, FloggerBufP.bufType = LoggerBuf.BufType_FIXED;3 Y% x, p% o) a7 t& E
5 P* z3 V' S& ]9 v9 z  V
var appLogger = LoggerBuf.create(loggerBufP);" H' \. |  H4 M
appLogger.instance.name = "AppLog_Core1";1 u! p0 F' |" e% s
Defaults.common$.logger = appLogger;1 Y, E- O; q1 h8 Y
Memory.defaultHeapSize = 0x8192;   
% M1 \: E' x- ^: U3 D  NIdle.idleFxns[0] = "&LEDStatus";
/ J# o- r3 o  o* Z+ N5 H+ ]Cache.initSize.l2Size = Cache.L2Size_32K;1 j( h/ S  l. [/ t/ O4 X9 n5 ]

3 `/ @3 b1 w/ W  e5 U6 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 */
% F3 h: |$ [0 q, q8 zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 ^5 q! }% \8 ^  A
var heapMemParams = new HeapMem.Params();$ A4 D5 c! d! J  k0 K2 H) m
heapMemParams.size = 0x4000;. z5 A3 b1 X, Y7 O# Q; D% f
# L) m( m2 m) `) k
var Memory = xdc.useModule('xdc.runtime.Memory');
8 {1 T& O9 r) D5 ~, [  r7 {+ y+ G0 BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 z8 B$ E* ?( s( M- p- y4 d; f8 b- c$ V
我大约calloc  每次共计大小为5K*16bits,
$ l6 e- F  S0 @( a' _4 k而默认配置才0x4000、需要改大。
- n+ H9 A: |8 ^7 I2 {/ j5 M; y4 M
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */) W+ W: m8 r  ?
Program.heap = 0;% i# N8 i2 X7 p3 o8 l  o( g
Program.argSize = 100;  /* minimum size */7 H, ]: o6 Z; @
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-17 06:21 , Processed in 0.040576 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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