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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* @& _& W' k3 T2 |+ l1 j# _7 Y! N' J& M" E
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ j1 j6 _3 P( q; q+ i9 u) l7 b- ?2 y/ l" r# v! K1 h: X
其他程序段。。。。。
7 Y. ]" Q& T5 s" x, \7 o, A# N& i , E" }( N7 j7 ^# q' K/ l
   free(x_d);; I/ X  U( p- S  Y6 p. q

# V/ x' q. d1 j$ s使用DSP侧单独调试功能,验证动态申请没有问题,  W, z; C7 ~" y5 n! A/ H( u5 \

; b8 q2 ^0 O8 {: R, S5 c+ G但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 G+ T0 [2 A* Q. h) a6 f
+ k) b1 Y  \& E
" H% Y: K* q7 `2 g, p
. o' g4 s; C: `. n, _
+ j' @/ ]2 t5 f$ ]- |  V  x( U
" s1 c* K/ P8 n8 h

4 |' G5 D+ Z/ S4 M' Y2 }" a  B# n; R3 a, N& ^7 H5 ^

  L+ C+ X- F. V" V
) q/ @, \" G  N- Q8 z* i9 M9 g3 ~8 p5 t' K+ \% l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
" M7 r0 Z& R( A& j我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 ]! K! u8 k7 b6 C- V6 ?) b
(不过疑惑的是,为何单独DSP仿真就没有问题呢?), C4 ~& {/ a* _9 n7 z; h
2 k* Q! y' s6 {0 _; h: [- U: v4 T
是不是需要在DSP.CFG中进行配置
8 w. k. H& g8 D! c6 i& V4 q% @6 Y我现在的配置为! d" ^* ?* ~' {
2 Q% X; X6 K0 [! X& q$ U1 |. q( ?
/*
1 `! c/ `9 J5 T *  ======== Operating System Configuration ========# A# @7 y2 |' R$ U
*/0 e5 m$ }+ y0 L. k/ Z6 S

$ `1 `$ Y3 W# H+ s6 T/* no rts heap */
, J3 |0 D! \2 l5 [! BProgram.heap = 0;
' D  `( r$ l) A0 e9 T$ ~: YProgram.argSize = 100;  /* minimum size */
2 G# N: Y2 I/ c9 n6 s/ @Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 e# X/ O4 T$ }) H  Z
" s' |6 p' w# n3 ^
/* create a default heap */
& U( W  Y8 U0 _$ B( w) wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% N: m: C; j6 N/ ~6 y$ g% y- {4 ?$ `( Y
var heapMemParams = new HeapMem.Params();# h# T: f7 Z2 N6 x4 [8 T
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& V  @; }3 h5 K* \' C5 E! S2 K: P" V/ f) Y; D3 B& s4 ^7 S( V
var Memory = xdc.useModule('xdc.runtime.Memory');
. ~8 n& `* h$ N" u9 m1 D. ?Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! ^1 F2 S& M) x  v: i; u* o; P

6 W, ^6 O# }, T/* configure System module */
6 r9 K$ e1 s- T; M6 U; Lvar SysMin = xdc.useModule('xdc.runtime.SysMin');$ M# B: @; i; j+ o. r
SysMin.bufSize = 0x1000;3 X+ L" s! E7 y9 F: T/ [
SysMin.flushAtExit = false;
6 U& l6 {9 n$ i7 k# Y: q* R* C( O( S7 p* G
var System = xdc.useModule('xdc.runtime.System');
) M* _. b& b& O1 R5 V3 g7 ySystem.SupportProxy = SysMin;& ]/ P; D. }4 t# ], E  c2 x* `- i
0 Y& |& H# F, r" ^4 J# S. M
/* configure SysBios to use the lower half of Timer 1 */
* |, \* P" ]3 V  }5 T$ v- V) G; n3 G7 t* |var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 k( m! O' }! ?' t& k- i5 `
var Clock = xdc.useModule('ti.sysbios.knl.Clock');- E* \/ m5 B/ H4 r0 `: F& E
Timer.timerSettings[1].master = true;, A5 l3 }- q3 w
Timer.defaultHalf = Timer.Half_LOWER;5 m: v* m7 g4 }9 [0 ~: f3 P
Clock.timerId = 1;, e5 v. X' f6 U# o. F; L  L: L

) c# I% r) c( T& Q/ R, r) G- n7 T! u, E
/*
; e4 W+ n( d1 n# x& h& E# c, A *  ======== Miscellaneous Configuration ========: N5 }' K2 m" c% s$ }5 Q
*/
0 I4 d0 |& q6 j( z" a7 R( _7 a; G8 N+ Q  W1 ?
/* set default diags mask */
2 j0 Z: x/ A8 |; H7 C3 }var Diags = xdc.useModule('xdc.runtime.Diags');( u$ N) T# t+ Q3 `$ L6 v! H
var Defaults = xdc.useModule('xdc.runtime.Defaults');; P7 X$ W% O. r2 U; H

8 @9 y" W# I* [3 IDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 N! j) u  f% M, M& ^Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;9 N8 O0 M' x9 |# y
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;) u  L! B$ @' L) {& `
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: c& H' L7 ~; b- Q9 i0 Z! r
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( x7 K* ]  h* @% o: e' }Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& \* J# k$ Q' s/ s: eDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 p9 E: U! U: _" p, C2 ~# t
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
- |" z! L( c6 ]1 |* G$ YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
- R7 ?0 \, y. q4 m6 Y/ gDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* b9 d7 d9 d' D, j# u0 ~; W5 @
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;2 q; b6 a2 G6 s( \: H4 V! O
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;3 r# U9 I' ~3 Q" O
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 d& ?& O/ ^8 M' Z7 k4 @6 n; i
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;+ W' [9 j1 J  g5 P4 }
: A4 ^, S# I  {2 W
/* override diags mask for selected modules *// t% ~% z8 c0 W7 ?; H
xdc.useModule('xdc.runtime.Main');
# M: l% c( R- Z2 [* o7 B0 n2 KDiags.setMaskMeta(1 f( W. l& ?/ r  j$ U
    "xdc.runtime.Main",
5 n/ ^/ [  ~  x* N    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* ]) X* S9 j% u, q& E    Diags.RUNTIME_ON
% Q9 k2 c; q3 x0 X2 |: G+ _);
. Y( W4 U  I. N- X$ p9 }4 S0 i  g, S. N3 ]( _9 P0 t- c3 t& a
var Registry = xdc.useModule('xdc.runtime.Registry');' t) b# _: l% d# h: \
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;% M+ J; T& g9 Q0 X; ]
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' ^7 W& h. c: [' CRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 m- r3 D. y! K8 T
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;, v, y/ I+ \! ~4 c) m

& Y3 y4 Y9 Y1 s3 P4 F2 T  }/* create a logger instance */
3 n2 [3 T: {# y( V" Evar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
1 B8 i0 ]$ w1 I3 R+ F, C- Zvar loggerBufP = new LoggerBuf.Params();
* a/ i. O2 R% E- w% v% dloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# i$ z% a0 i4 I+ S. PloggerBufP.bufType = LoggerBuf.BufType_FIXED;
' Q, L( ], I3 R4 B+ z# f- k  i$ w4 X2 h( i8 X" L) M
var appLogger = LoggerBuf.create(loggerBufP);
, w) M. e( J* k& QappLogger.instance.name = "AppLog_Core1";. c& c& v; k1 f5 h
Defaults.common$.logger = appLogger;: G6 l; p4 K! Q) W
Memory.defaultHeapSize = 0x8192;    : r4 d# |2 m+ @; r6 g# v
Idle.idleFxns[0] = "&LEDStatus";) t% S4 E$ O0 D
Cache.initSize.l2Size = Cache.L2Size_32K;
4 p6 p/ J0 e" q1 A9 j6 h
" ~4 x: \* X* Q" s' @" V5 W: c
回复 支持 反对

使用道具 举报

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 */- S; j# @9 U$ q8 Z) I/ ?% V3 n6 ]+ p
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% W( V) m, h+ T$ ]4 e
var heapMemParams = new HeapMem.Params();
& q" H# U' s+ CheapMemParams.size = 0x4000;" ?$ p2 S+ o  k& I
1 B. Q- L% u) _& j8 ~
var Memory = xdc.useModule('xdc.runtime.Memory');
0 g/ y' ?2 |" C7 [( VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
' ?5 r" G0 {9 K  Y% U. H9 Q8 d; s$ u/ w, E& R' ?) N; d: N
我大约calloc  每次共计大小为5K*16bits,
2 L! L9 y' g3 \) P' N而默认配置才0x4000、需要改大。
$ E8 ]; U- R( t4 l/ K+ [) w1 G2 [) l+ e1 _2 {
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. C8 g0 N  K; B" H9 p0 F
Program.heap = 0;& S# D7 ^) s: c( g
Program.argSize = 100;  /* minimum size */! e1 `, a& E! f1 i7 N! K% y: X
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-22 06:16 , Processed in 0.044293 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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