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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构6 ]$ G2 I8 N' J# A% v3 u1 e
2 q  y/ G' y$ z. _( m
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
, V1 |3 y/ B  x5 ?7 `# c2 B" a( e* ^( q: l: T
其他程序段。。。。。  n* p: V5 ^- r7 L( ]. q* K* e
: k* k4 m2 a! |3 b8 l0 w: h" y
   free(x_d);3 l9 w* U9 [, B* A

7 f' C0 r. {4 F2 B8 c使用DSP侧单独调试功能,验证动态申请没有问题,- j9 z5 h& v  ^  p1 _

; d) f( ?8 N! ]5 \5 Q# H# ^但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。$ V+ k: z1 i/ ]' g, l, D
8 r2 Y% M" h/ k$ s: Z5 j8 K

. U( ^/ o* ~8 f# ?( q. D4 i9 }, I
; ]2 t9 c/ G# @" B) N
$ Q, h8 T- d- }6 w2 f: G
; E6 g, W5 }% G
- ^% N8 M" B$ `+ X; M, U9 g0 R& w  [) E

7 [+ s0 O: @- F- r
: N  R, D! I( u$ n# d, M7 \6 f$ m: [6 w
分享到:  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 */7 T& F0 {8 b# ^& R' |
Program.heap = 0;
: v  k# u6 l9 y& HProgram.argSize = 100;  /* minimum size */% a% I" x; w/ x# \, Y' G) T+ O
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
% O8 f! d1 }9 A2 A6 G7 ^( _. K, l- jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ f: Y( s! W5 e" [$ u0 v3 H
var heapMemParams = new HeapMem.Params();
: m: r' t- E& M3 u& Z. D% E. \heapMemParams.size = 0x4000;
7 h+ b0 K6 j6 O- T4 `3 {1 s
7 h% l: w6 v; C/ p8 cvar Memory = xdc.useModule('xdc.runtime.Memory');
- a2 I- y3 c9 W8 G! _) GMemory.defaultHeapInstance = HeapMem.create(heapMemParams);+ ?* r6 C" \2 a. |7 C! }3 o

6 j" r7 B& E2 A我大约calloc  每次共计大小为5K*16bits,0 G" r0 B* ?+ {" j0 W+ K! ~  \& S! D
而默认配置才0x4000、需要改大。3 A4 t8 @- s+ D- F$ Z0 O5 F

0 N: l- E' N( P
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明! W7 O' |- d4 X: H! q8 Z/ I
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下$ n3 k7 F" `) c& W$ j0 Q
(不过疑惑的是,为何单独DSP仿真就没有问题呢?); X2 s8 G1 H  k% K% I. Z
/ L+ g' {- b9 y0 y# j$ b) G5 d
是不是需要在DSP.CFG中进行配置
- k' ?$ q: G: x% i我现在的配置为# w: O+ }( ?* p4 o
$ `/ O4 I" K& o; A! e! ~3 R
/*0 h# [5 s8 B( t/ c4 ?/ |9 |- L0 W
*  ======== Operating System Configuration ========
, `: Y) Q& H$ |8 K0 S- Z */
4 n5 u. i! X1 P0 Z: w3 b
7 A8 ]' z3 _: ^1 V, D6 j/* no rts heap */" V% \. B; u, t% h
Program.heap = 0;/ i/ L9 p6 L5 S8 m+ E1 F0 K
Program.argSize = 100;  /* minimum size */
  ~$ d6 M# i3 m5 tProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; X2 J: p8 M; H5 ]
9 F9 _! x! B" ~
/* create a default heap *// T  }" u7 k, B$ J# s  n
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 R# L2 Z; s9 z7 |- q
var heapMemParams = new HeapMem.Params();
7 Y' ]7 w6 q8 a, w5 u* y% H& SheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大7 l7 _0 G$ X5 C
6 \$ c$ k! w& m; ]
var Memory = xdc.useModule('xdc.runtime.Memory');
$ K* X/ Y4 E* b4 y/ n# ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! O# S. F" b# Y( J
4 o; F: o! `: o# I" k/* configure System module */0 k; L3 v& ], i4 C' B; B
var SysMin = xdc.useModule('xdc.runtime.SysMin');
5 T& b0 L6 U7 t! A- rSysMin.bufSize = 0x1000;, o5 \" A- D4 t: m8 j) [3 K# I
SysMin.flushAtExit = false;( Q  y7 g; U3 K4 ^- {) x9 R" z
% c" Z' e. f5 p2 F
var System = xdc.useModule('xdc.runtime.System');
8 G" D: H: e, i! p/ n; h& \) E7 b6 wSystem.SupportProxy = SysMin;5 R8 Q3 d9 D( s* z" s, O6 o

; j  b' k8 P+ Q8 i! u" d1 L/* configure SysBios to use the lower half of Timer 1 */
; M9 a6 p7 h6 l3 U7 Z3 I- a5 i! o! Lvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% g2 w& z: y& p) i
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
# E, E# i$ O" s7 T& vTimer.timerSettings[1].master = true;
9 n4 r- D0 l8 a+ b1 G3 j; \8 gTimer.defaultHalf = Timer.Half_LOWER;" `1 T. D1 y, O  J& t( B( Y, A
Clock.timerId = 1;
0 a, Y! z, X3 q& z, O0 f* ~( l2 u/ E( v( f* z2 E$ e0 g# U

+ B) u3 v5 v; x& P4 s! `+ o7 w" }- w/*; D+ \6 E+ W1 B8 ~0 a3 b
*  ======== Miscellaneous Configuration ========
% l  a- k  W0 V4 {- q# w */# G5 Q" a9 P* R+ Y2 [, o  t- F& w- b

+ ~4 B! G, A" n) F# t, A/* set default diags mask */: {5 y: ]. S8 S2 i( u5 C, G4 t
var Diags = xdc.useModule('xdc.runtime.Diags');; t2 L/ o# x2 P
var Defaults = xdc.useModule('xdc.runtime.Defaults');' R: y# _( j: k  ^2 N+ _

5 s/ O- X+ |! I% f$ |/ E. r0 G' |- dDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;8 P" y4 A; l' v
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;! k2 P  V# x8 O" A: S
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
, D3 O7 K8 s7 W8 t' R* o* z. C# uDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */+ {3 p/ f  j4 W6 p
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; ^) C, k2 _2 _) P& \5 ZDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
3 y* R' ]( b8 j# u4 p0 l- {Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 ^% D$ e9 k; Y/ ]Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* ]" m. y0 t# Y7 P: l4 p4 s5 D8 V/ qDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
' t$ U+ Y% T/ C2 |* ~0 t2 T( ODefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ X4 E( a$ v! T( x' E
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& c4 C  n3 F4 F% h$ JDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 O3 _" C7 C/ H6 j8 \8 {Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 T5 J/ E. x, f7 M4 EDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 |5 r( J) s% P7 ~

- ]( \3 ?5 U' \& @/* override diags mask for selected modules */( J6 v# h6 [" d2 N0 o0 E
xdc.useModule('xdc.runtime.Main');. X, G2 U3 ^  o
Diags.setMaskMeta(
- u' D2 J2 @2 d/ K7 S- q# d    "xdc.runtime.Main",
' ]3 G2 X6 q6 s, s! Q8 V9 i6 V    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: j+ C( }. g; t+ R2 R0 I$ ]    Diags.RUNTIME_ON
1 A5 j0 Q+ `. y+ q2 w);% g6 z" K) T" Y3 ]) c

7 j- a$ D+ @& Jvar Registry = xdc.useModule('xdc.runtime.Registry');. Z9 K9 _/ [" R4 ?
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;2 ?3 F& o+ p2 P, g+ p6 E) n
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 Q* P( U  m7 h9 I* N5 iRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& P6 }, K1 \9 s* M* yRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. C/ a/ s. H% ]% k# E* m: x+ M
+ B3 t5 I: k" o5 |7 `9 G/* create a logger instance */
# }: T9 Q2 x# ?var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) s% W: K5 s) J. K3 p+ |# Nvar loggerBufP = new LoggerBuf.Params();
: z2 H( }; y( MloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 L3 {9 [2 t  D! ^: K
loggerBufP.bufType = LoggerBuf.BufType_FIXED;% Y* f; j: q7 I' U* y0 w

4 I$ @- P: @) S+ Y3 evar appLogger = LoggerBuf.create(loggerBufP);
) a7 G- P+ P8 u9 M+ ]6 o0 B2 e; tappLogger.instance.name = "AppLog_Core1";
, Q* s! D. S7 }( d4 G, mDefaults.common$.logger = appLogger;  J( q. d' `- [" [) @& P2 }
Memory.defaultHeapSize = 0x8192;   
! x/ h: @4 Y0 I5 p6 bIdle.idleFxns[0] = "&LEDStatus";
2 J: \" H5 Z* U/ a. i3 K% n5 G9 ^( TCache.initSize.l2Size = Cache.L2Size_32K;
' S& g) x) ~# K$ _  n+ V+ j  k9 `$ @9 }' _2 |+ z4 c2 }
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-9 08:58 , Processed in 0.048180 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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