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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 n( U! y& {: d1 [  ?. A: q% K. Z# G3 d- @* e0 F2 ]5 h8 I
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
' A& t0 x# T$ x# a- e
: `5 f6 b( ^1 e( v$ C' [其他程序段。。。。。: s; N: o  L; `+ r  v( w

$ D* Y3 A$ H8 }   free(x_d);
$ @8 A) T9 q: {1 Z, f5 E% i
- G8 J- b+ n9 f使用DSP侧单独调试功能,验证动态申请没有问题,
: M; m( ]9 ]5 y; ~! I: y
% u4 _1 v: a$ U* [( N- O  W但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 A4 I4 N) u& g! C; _
* }8 t, c$ X) x/ t

9 x9 ~" [0 E% A% y+ ^. n" c
/ Z( W% F2 @; Y3 }9 K% p8 {9 {: C' H; [4 ~1 J4 R1 k

0 x: l; q' M2 S6 K1 Q( p' ~+ R) s- }: P
' R* d2 C# `! ^
. w7 H( S( j6 h4 @1 j
' H: I5 F5 ~, ]
( ?9 x: b0 J% |# B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */: r  u4 @1 T) J0 t! c
Program.heap = 0;! C5 {2 _- r$ A% N0 w) l
Program.argSize = 100;  /* minimum size */
3 s+ N* b0 o" G6 H$ O9 h$ [4 zProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */0 ~( Q$ f) Y" w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* ^1 w6 ^1 G; a, X/ k! r& ]var heapMemParams = new HeapMem.Params();
. C6 \4 m/ q% n3 t, q6 t: R8 h2 }heapMemParams.size = 0x4000;: L% i/ B' x" E" p$ A) K& z, n
3 [, s8 O$ ~5 l; h& \9 j0 K
var Memory = xdc.useModule('xdc.runtime.Memory');
& a$ h- M2 c4 U* s7 W8 `9 oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);4 p* F* f% I* i+ s

9 n7 q. r% T9 F, e+ d8 r我大约calloc  每次共计大小为5K*16bits,: v) h/ f& U  d/ Q
而默认配置才0x4000、需要改大。3 Z7 G. {+ O+ R5 J2 ]' k

& f4 K! |1 x7 Y! j( R
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明; r( d/ u: a  e% z, t* w
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* U' X+ T. ^0 \, Y. ](不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 W4 k9 A: V  B' v* n

& K! U; j& ?( j* n0 \8 N! _是不是需要在DSP.CFG中进行配置3 y7 W, ^2 R/ X  P- F
我现在的配置为8 [' D+ f0 Q4 H5 @1 @& S. b
5 \: {1 `6 y/ D' Q" {& @
/*& t  ?5 q6 C( j8 _  B6 K
*  ======== Operating System Configuration ========
6 y1 ~/ }  e# S7 W5 d */
1 B/ N$ X1 K/ h0 k8 f2 z
" R3 c# D5 Q4 T! I! j/* no rts heap */+ ~" y& S5 ]. W8 I
Program.heap = 0;
5 k2 ?2 F* B5 C% E1 s7 MProgram.argSize = 100;  /* minimum size */
) I$ w/ W$ r, M! n* f( UProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
$ {3 O* y( v0 E* p9 o' w/ v5 D! z7 _  x8 F+ c
/* create a default heap */6 R( p( ?; E" J$ a
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 v) F7 k# \- x$ Y9 N
var heapMemParams = new HeapMem.Params();* `! f3 F" }( N. n9 z' e! e2 Y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
; {0 R. \) X# U
; A  [1 F& q, J5 s' ~" N. [- I  |
var Memory = xdc.useModule('xdc.runtime.Memory');
4 E1 O8 n, @: i0 ^+ `Memory.defaultHeapInstance = HeapMem.create(heapMemParams);0 K! z1 }, k* Z, _; a

( S7 S' ]6 }  t* [0 j5 W4 S) }/* configure System module */
1 H  K' P$ j5 I/ ~. nvar SysMin = xdc.useModule('xdc.runtime.SysMin');  ]" l4 n0 w1 a& K! Z4 q
SysMin.bufSize = 0x1000;
, y; m! e' n" aSysMin.flushAtExit = false;" @( G4 ^( f7 C5 @2 U" Q3 K# i

6 B* L& n2 K* p6 N0 K9 Dvar System = xdc.useModule('xdc.runtime.System');2 e; [$ e. g& x- X7 r) e
System.SupportProxy = SysMin;+ J0 s+ @0 B  C) F4 f

4 s7 m; J9 y/ e; I& r& @/* configure SysBios to use the lower half of Timer 1 */% H8 u$ b6 l- y. u0 N, Y3 L. I
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');; J, L' N3 e/ C: ]
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
: H) r# c: L8 t, I( _" t+ y$ o4 ]Timer.timerSettings[1].master = true;8 H1 b; v& h9 ^) e: ^
Timer.defaultHalf = Timer.Half_LOWER;, _( C- v" }; H3 J* q0 Y( |
Clock.timerId = 1;( f, f% t. _# V& s
! D3 H# `' s3 I3 j0 p

5 P6 s' h) c$ F! W5 H7 a! U; T/*0 W' p$ N# E, Q  y/ R: s$ \6 n
*  ======== Miscellaneous Configuration ========8 M- S3 B5 j; p" B
*/
6 z; o6 `; P6 f, U% Z* [! T0 r: F* m
/* set default diags mask */
2 J2 O! A* w- P, K2 yvar Diags = xdc.useModule('xdc.runtime.Diags');
8 U( w7 p+ u2 b% Ovar Defaults = xdc.useModule('xdc.runtime.Defaults');- t. d. L  [0 i  z

0 C+ i+ `' s( K5 C, A) \; I. kDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 q: K2 \# h; v6 ~  c2 S; `- \Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( _( g8 q& u' y
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# w* S" M. B# o3 ^4 |
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 W) Z. V0 ?" LDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
" O' q/ y/ t  \) R6 U. fDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. j2 I. J9 w) I( B0 lDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
3 P8 U  C5 \$ {9 Z* KDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* X" X& ~" k$ K, cDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
: g0 N+ v6 ~" EDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  r) C3 \. `9 [4 X
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;7 m2 B7 \. H& [! S2 K  L3 Q  S1 x& Z
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. W# P: `; b# S/ K) EDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
  e% Y% J4 L9 ~- GDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;- K8 y* b1 w. W# e7 ^

# L# z* G1 E) x" f: g+ x) u7 C/* override diags mask for selected modules */5 f( d6 D1 z3 k6 Z, u
xdc.useModule('xdc.runtime.Main');
3 f- q- |/ u8 L4 zDiags.setMaskMeta(
9 t. h* N% w. ~+ H, r7 p. x$ Y    "xdc.runtime.Main",
& K$ W; u0 v. ]    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 N2 w2 f- C$ T! O" e    Diags.RUNTIME_ON
, A1 Y" w/ k& A# Y0 W+ {' \" e);, H7 k# D2 h/ c0 T) g+ ]! h9 J) m, T

1 H1 N. O5 W$ B5 wvar Registry = xdc.useModule('xdc.runtime.Registry');. c' ^! ?$ ~# r- ^
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;# d% s% |) ^3 m2 X8 ?$ ~2 B
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( z8 F$ k7 o2 y! ^2 r2 z- s
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# F# x* j9 F/ \6 X1 y; v( XRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;: c% {3 e! B% R  C: _

5 `6 d/ F( U& g1 [/* create a logger instance */
. t' q: \6 f# K1 K6 a; H% y( Hvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% o& ]5 x) [. S  M) i. ^var loggerBufP = new LoggerBuf.Params();0 ?* ~9 q! E, Q  w8 I
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */; c8 G: ~6 M. m* o
loggerBufP.bufType = LoggerBuf.BufType_FIXED;2 G& _3 X. S2 ?) o$ L7 W* @7 ?
2 Y& o# w" c7 H$ w4 K$ o, R: S0 T
var appLogger = LoggerBuf.create(loggerBufP);
+ C  K) i: m- I2 @appLogger.instance.name = "AppLog_Core1";
* C# t) T1 d6 L% [3 d  h' Y4 P/ ~Defaults.common$.logger = appLogger;
; k; f3 U! w  l, }  a% k( SMemory.defaultHeapSize = 0x8192;   
* ], e. `# ]3 j5 k; {0 eIdle.idleFxns[0] = "&LEDStatus";
7 J; z3 q( M5 f- v; k  V; F8 s, rCache.initSize.l2Size = Cache.L2Size_32K;2 t) j* l; g9 {: C9 H

( C, v2 p' ?; I( l
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-14 22:13 , Processed in 0.040429 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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