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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构7 I/ m' ~4 D2 K& j8 i& w
5 _6 Q$ P8 `% Q% f0 I
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 P0 Z7 T  r% |: T9 m* r" E- x  g

1 _/ h  N* Q% ]  j4 u$ `其他程序段。。。。。+ S$ \5 n% }# n0 [5 ?5 Q! [* ~1 E
0 F4 F9 o4 d' w- |7 q' {* {
   free(x_d);0 M5 k& Y1 U/ \, s

4 M+ x; [& Q$ Z/ w. `6 V使用DSP侧单独调试功能,验证动态申请没有问题,
- y' t! u* C# L2 U$ S! i9 S6 D7 F" z# Y, T% W
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: R: t! V& C+ z8 P+ Z! `

# }! |" i0 }# K3 F+ S) W- R5 j
% Y) G* o7 M8 R
: q' i- Z6 j9 X7 D
# B: p, }- }$ M! c# K# N( w- W, H6 L' q5 t! J! A

: r: H6 \5 I9 p% X7 ]. T+ q" \' O6 x5 F. v
: l  T4 n" E+ A

8 u3 n: \) v7 A" w8 J2 ?+ h8 @7 u" i$ F- b3 f7 k( i" j: i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
2 t. @1 ^1 N& H. y) _  t, i我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& O9 v& _/ ?* h) p7 O3 L  r
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ e  s( A7 Q. x" @1 l/ \

$ ]1 \$ u# f+ I+ A, A3 N/ _是不是需要在DSP.CFG中进行配置
' h9 y" P+ s6 y  l" {' B我现在的配置为
1 W( G' z# I. _4 w3 n9 \# m0 E& [. L/ X6 H5 m
/*4 P- R4 k3 C$ D( D$ }
*  ======== Operating System Configuration ========' r8 E. h$ @$ F/ ?( [+ u* ]3 X
*/
5 F) |6 H8 @# c6 v0 j9 e
4 O  r7 a1 r  f6 u2 D& ]; J/* no rts heap */
: H+ J9 E* m4 s- \* W  IProgram.heap = 0;
  F( g, F1 L. L5 V! c/ [Program.argSize = 100;  /* minimum size */
$ e& I- N) \' J% m4 r, ~- vProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大8 d; U9 v* Z' q  q2 T5 K3 a
; O+ T$ b. }) s  @* @- G* g
/* create a default heap */
! `+ o4 d; E( b9 h4 \var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 U& M# i5 s  e3 x+ Q  a* H
var heapMemParams = new HeapMem.Params();
' W' z0 I% S& R2 e: F) R1 YheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大6 h8 I% a6 Y5 D" [- R4 g
; P/ `" r6 d5 Q' R5 P9 i
var Memory = xdc.useModule('xdc.runtime.Memory');
8 w8 V- U6 N1 O# N' Q! y- BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);+ Y2 m$ i1 F0 N0 S

. x3 |* d- T% y) b, V8 F: I' ]8 [5 P/* configure System module */
& C5 c3 i  t# c" Evar SysMin = xdc.useModule('xdc.runtime.SysMin');
4 j. G3 n1 Q" F4 @$ H* ]SysMin.bufSize = 0x1000;6 l7 F( G. v: D9 S; G' E  w4 X
SysMin.flushAtExit = false;
& o8 h, f) x2 {
+ J4 I' B! {3 {2 D4 W: _var System = xdc.useModule('xdc.runtime.System');
" u" z, k, ?3 A3 f7 w3 ]System.SupportProxy = SysMin;
: \3 C* s7 X. F1 P$ B% a9 ~& I2 b, ~) _  g6 N
/* configure SysBios to use the lower half of Timer 1 */3 ]& ?( G, [# x6 _
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 f" I- ?! x9 b. Yvar Clock = xdc.useModule('ti.sysbios.knl.Clock');+ l1 q& w- m9 S# V' ?
Timer.timerSettings[1].master = true;
+ c6 K) f/ J. R, T( x! kTimer.defaultHalf = Timer.Half_LOWER;2 x; P8 ]( S2 O) O6 u1 Z0 k
Clock.timerId = 1;4 \+ u7 I) E0 U: M/ {' a2 M
, F8 Z) P4 I( v5 H; X
. i5 s# G) N" z0 r/ O
/*
) a* s- M0 n  C( O6 J  y0 M# i *  ======== Miscellaneous Configuration ========
% z  W9 z; ?# _ */
6 D5 T3 f, h, L+ A9 \- J( {% N* A6 d: l& c! }
/* set default diags mask */$ [: n1 `; w+ \$ q
var Diags = xdc.useModule('xdc.runtime.Diags');6 p, g/ e: W5 L- B$ C, I# X
var Defaults = xdc.useModule('xdc.runtime.Defaults');
" G3 e! m% W2 l( b9 m" M2 W* u
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
! b+ w  p9 z& g& mDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 ]' q: d5 Z- t0 lDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;0 o( i# T% _+ n2 h' q; o, n3 j
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 I$ _- o2 P7 y7 sDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' N; I/ q; C' u6 u* ?5 r7 a7 N
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
/ F; v7 W9 t. V6 O; ^Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;1 d: U: u# M7 K
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
. B2 _$ }! d8 C& f0 q8 ]Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( y7 Z6 o. V5 Q2 Y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" j9 N, u: U: h5 [: q2 ~Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. N! }; Z; `; n
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) @' _7 {4 b2 b2 C( g' ]; w2 y0 P
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
" k/ ]3 `: x  W4 i6 }9 C+ uDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, q2 S, y2 g' u

8 ?3 a" [& `. J- {- T7 E, U/* override diags mask for selected modules */
( |8 G! [* u) X. Q* ^xdc.useModule('xdc.runtime.Main');  e7 x5 w7 w  |
Diags.setMaskMeta(  ?, T, W6 M/ t3 {
    "xdc.runtime.Main",
& C; h& T7 ^; H' s/ e- k    Diags.ENTRY | Diags.EXIT | Diags.INFO,, q9 g, N" Q6 z  J5 {+ N
    Diags.RUNTIME_ON
+ i7 |- i; _8 X( {);
8 P, T0 D2 Q6 ]9 ^( ]" f) [, b# q& S3 C" i
var Registry = xdc.useModule('xdc.runtime.Registry');
6 v* Q( N8 s; l  NRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ [* ?. C+ z' E3 z' D& J& v3 PRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( Y- S, g/ k7 s" O- I" V' g1 j
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;  F2 w- v) i- K8 ~( ?
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;! d" a; L; L( l0 u) x( i
0 V1 @4 {3 A9 W1 l
/* create a logger instance */1 K7 w  s4 R2 q" E
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" W! p- |6 v2 `4 Y, `
var loggerBufP = new LoggerBuf.Params();
) |1 Q0 Y, ^- w, b! O5 r. zloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 T; x8 o* P1 J- }2 [/ b4 H
loggerBufP.bufType = LoggerBuf.BufType_FIXED;5 I: H( ]7 t! V

* E) Z8 l) r$ T/ Vvar appLogger = LoggerBuf.create(loggerBufP);
- |  t, j0 ^1 \! Z! {appLogger.instance.name = "AppLog_Core1";; @* g5 ^! z& d6 }  h1 ?
Defaults.common$.logger = appLogger;
1 P9 h5 B2 ~: p/ p/ kMemory.defaultHeapSize = 0x8192;   
# G% E6 k3 O! r0 z; R0 LIdle.idleFxns[0] = "&LEDStatus";, ~+ t" ~- F# M% A: A* v
Cache.initSize.l2Size = Cache.L2Size_32K;
1 F/ X: H* q, m& n6 q
. a# n1 v0 d: c  u. s4 [% `
回复 支持 反对

使用道具 举报

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 */
7 `/ P' H  P! Y. k. q. @var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 T" t) z% |" }  l- G$ V" M
var heapMemParams = new HeapMem.Params();3 z2 F0 U1 M! g8 N
heapMemParams.size = 0x4000;$ C0 s& L2 L- u5 s& f. v# t

' U% b" P& X, l) h( A: Gvar Memory = xdc.useModule('xdc.runtime.Memory');
/ q0 `! s: j, P4 A& m4 GMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
! r+ t5 ?4 o( O& C/ r( P$ O2 Y  y" F/ T" |2 r% n6 T7 E' Y) D4 J* D
我大约calloc  每次共计大小为5K*16bits,8 \! @$ o7 L! b3 F# A  |/ K
而默认配置才0x4000、需要改大。
5 F: |  ^, @- _
5 B! n8 o# m" J- i/ z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
% r( C! _3 ^+ `: \% t" w- nProgram.heap = 0;
& H5 {3 l8 M9 w- _* l( h+ B3 VProgram.argSize = 100;  /* minimum size */& s1 s0 P$ i; H2 g
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-18 00:31 , Processed in 0.042752 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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