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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* y+ k" E0 x/ [9 T' C0 Y0 E: }8 n
8 m7 K7 i: J- ^9 e( V/ G    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 _- H( Q; L- M! |3 n) j, U$ @. k. n2 @- ?$ ?* k" u0 d7 O  \& Q8 q
其他程序段。。。。。, e6 ?" b. ^7 d

8 [7 k) d* R6 o* ]0 t% c$ [/ n& M   free(x_d);
; ?: g: D3 p- V' d* P) r$ D
6 q7 y3 T% R5 E- g3 M/ p使用DSP侧单独调试功能,验证动态申请没有问题,
! C4 ^7 E8 U3 g2 M
4 p( e# P( e) u2 f但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
* R+ g/ Z+ x9 u) B! g; j$ h

% t% ]% U2 e' c& Q) h9 X7 Q4 N8 W0 h' Y) u3 t
( A/ @+ c9 ]! c; U5 x( i9 S

, W, x1 Q. b  f5 Q+ T: q3 |6 I( [' J0 E

; F- g2 K4 r& u7 Z. H/ Y1 Y5 g+ Y) _! ?* @. |2 {! P1 a
3 [: g$ U  M0 I; \7 h, C

% k8 E4 ?2 [" Z7 }! J. r# S- Q. N7 @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明8 S2 _3 s8 E( `! u) t
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* n8 A0 R6 D( I$ ]9 r2 \(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
! p- b9 @' Q  f  ~5 u

% g  U/ O$ q# Q2 a是不是需要在DSP.CFG中进行配置' Z9 v6 K9 n1 r4 m6 l0 ~  z- K% l
我现在的配置为
, E# v) K# {/ m8 w- V. j7 h0 |$ C
/*4 e' k, ^! }5 d: l
*  ======== Operating System Configuration ========
4 Q% b3 K* i% J4 \' A */0 T+ E; |  U+ x( Z6 R

: N/ _* w  V  z& E( o% \/* no rts heap */* A) a6 S5 ]  e  n7 f+ z
Program.heap = 0;4 e% s6 C  P! R! R
Program.argSize = 100;  /* minimum size */( }! d3 L/ R/ C+ R5 q' z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" k( a, {. \* Q/ |1 N" [0 G

; f$ U, e  y  X+ I/* create a default heap */
7 B* U- K/ u, M3 Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 V+ r: L, x$ C1 uvar heapMemParams = new HeapMem.Params();) R4 V! L9 d. ~$ Y- z, R, B
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) x) A4 x% I5 Z) g& b3 ~
0 Y. o! b+ ]1 }7 m7 X
var Memory = xdc.useModule('xdc.runtime.Memory');1 O" k: F+ B+ u$ N5 P7 w2 X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. }7 M& y$ @; Y: Q4 U1 {3 `  G% M

3 x6 F5 H0 V6 M; H/* configure System module */$ p/ G. \+ T2 O
var SysMin = xdc.useModule('xdc.runtime.SysMin');
& H, n  r. ^% s4 S0 e* TSysMin.bufSize = 0x1000;
9 e8 v8 R7 S" {& w  RSysMin.flushAtExit = false;/ y$ p8 j9 X& s! j8 ~) B

  t2 }- m2 `0 U7 V7 Hvar System = xdc.useModule('xdc.runtime.System');
% M, f( Z1 y& ~" T2 BSystem.SupportProxy = SysMin;3 L5 J' W! K, R
0 i7 v9 u0 o. I. h  P) C
/* configure SysBios to use the lower half of Timer 1 */
* i( M1 R5 r+ hvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 M# m& @1 {; y1 Bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
- a/ p5 O6 @& b0 ZTimer.timerSettings[1].master = true;7 ]+ P  U! y3 s. j  r" `
Timer.defaultHalf = Timer.Half_LOWER;; i* I. b7 j  g" A' G4 ^
Clock.timerId = 1;" m0 d8 O9 k0 ]+ `! r9 ~1 e- W
6 {" D- ~# h7 ?+ N+ R- o

7 V! S2 ], x9 l! _" r+ y; }. w/*9 D& N  x9 O7 ^/ m# e: k
*  ======== Miscellaneous Configuration ========: c8 U9 {/ ]- L4 `) [6 c2 d! h
*/
% }9 r% u  M; T4 P4 h. `* f$ a2 O1 z
/* set default diags mask */% T6 A  E5 Q/ _
var Diags = xdc.useModule('xdc.runtime.Diags');
9 q- n4 G+ N+ u- ]& s  }var Defaults = xdc.useModule('xdc.runtime.Defaults');- }0 t: V, K& F' F3 W$ T' V
( S6 R, g4 w; Y/ o7 b
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 A' n0 F, U" Z: n
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 V8 k# c1 ?4 x4 \. U$ i+ X
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. {8 W% V" C' M0 N( tDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 l  S7 I2 q& |: k8 L$ H) qDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */0 f# E: k  n- o7 M9 k
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 s* j  L6 B7 L/ r0 v
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
& g+ I2 I* J  u- G' f* e  {- xDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! _$ P" ]- X+ mDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. v) q; p$ }. @$ w/ H) l7 I
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
* @6 t$ f1 e# G) }) P, v& zDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 T9 c" w6 m" {
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;% K3 N/ y+ v4 b0 w( F$ h, t
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
# I* e( H7 S) Z; ?. Q( BDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  ^& Z6 \1 W% T: ^' J% a  ?, J. u' b
. ?6 h  n) ?+ w3 X) k( e$ A5 K
/* override diags mask for selected modules */; u' P* [# j; b# u* j: G* v( V; w
xdc.useModule('xdc.runtime.Main');
6 x6 ~0 s2 V; I! x! C& JDiags.setMaskMeta(
6 R) Z. }& t6 O. `    "xdc.runtime.Main",, y% r0 F3 b9 }9 V4 g" ]
    Diags.ENTRY | Diags.EXIT | Diags.INFO,  i* l$ T8 G4 E" w( r/ r, }
    Diags.RUNTIME_ON
7 b$ s: V$ l8 ?" j8 |);
7 h% F' D4 {. W! H- g3 H4 J1 n  I3 B0 F  X4 Y$ A" z. W5 ^. ^8 e4 P
var Registry = xdc.useModule('xdc.runtime.Registry');
) r* v8 h9 L2 I1 C) u: ^) o& P9 T5 tRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;% s- b4 _: X% @& `. i
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 r; C  S2 o6 O1 c( _0 S4 X& jRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;# E# y5 @, a2 d
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
9 C: N; B+ a& b4 J2 y
- ^% @8 z- h! U2 g# O) S/* create a logger instance */
& s6 \+ y9 R1 H/ j1 pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
( @& X) e$ \/ I: Gvar loggerBufP = new LoggerBuf.Params();
2 {# y+ f& X, p* }7 [* NloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- _* X7 a4 l: r4 r! l" q4 q
loggerBufP.bufType = LoggerBuf.BufType_FIXED;; _! ]% Q# d4 Z9 T, i/ o

2 A* _( R8 X( y" V, ?var appLogger = LoggerBuf.create(loggerBufP);
% |- A  S6 k3 I% OappLogger.instance.name = "AppLog_Core1";
- M3 c) a* q) o# \, i# \Defaults.common$.logger = appLogger;  E& P8 i+ s$ M) r. {/ m
Memory.defaultHeapSize = 0x8192;   
9 j4 M- s- k  s9 ~6 A1 Z- G- DIdle.idleFxns[0] = "&LEDStatus";
2 V  g5 Z9 V4 a/ ~# N) nCache.initSize.l2Size = Cache.L2Size_32K;1 E6 i! p2 C( }  A7 I3 w& x! Z4 j7 p

0 \2 k/ U) }, W" F% |. [# b
回复 支持 反对

使用道具 举报

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 */9 a/ w. c; @6 F4 n' v/ `; X; V0 A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  m6 Y; m* e/ q' N% Q
var heapMemParams = new HeapMem.Params();* {- f8 W6 g  G0 D4 [: B
heapMemParams.size = 0x4000;9 P: L% D9 T& I9 f1 x4 V$ e
6 G% m6 W1 Q* v5 I1 r; S# c0 V
var Memory = xdc.useModule('xdc.runtime.Memory');
8 N; g3 B) J( _) BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 x1 ^( `  {! W& z
8 P4 a) ~- j2 X, m2 \我大约calloc  每次共计大小为5K*16bits,( x  G/ j' E0 j- m  F: \
而默认配置才0x4000、需要改大。9 K1 r% J9 b8 o

9 `- d+ y1 X( d6 n0 h
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 m2 Q1 ]7 e7 t! j4 v3 JProgram.heap = 0;
6 Q6 X( M0 W  f( c4 ?Program.argSize = 100;  /* minimum size */
+ H) `5 Y! B3 c' t! j8 Q0 B* PProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-15 14:54 , Processed in 0.045375 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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