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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 f+ X! T% s  j7 f% G8 B, ~
. Q/ }, ?8 R5 y$ L    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! b) J3 a$ k* w9 L
; t! O, [) [6 Y9 w其他程序段。。。。。3 n7 @, x+ N, h" B, j: ?/ p+ Q. P
2 h2 d! u4 D, |$ y6 L
   free(x_d);0 z& p/ W! J/ Q9 N
+ o5 x& E* S0 y
使用DSP侧单独调试功能,验证动态申请没有问题,
8 S, X# m4 }! E3 I  g7 k" ]2 t3 M7 ^  V9 j! x$ i0 d$ R
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, u4 v0 F# Z$ i* f

0 Y( T3 U2 K, N. T( e: H
8 A" L  X. C  n
( @- u5 Y8 X" e, ]$ M0 v5 W/ \8 s5 v1 V, a* h9 Z# A! Y

4 q0 }/ c2 M1 V3 B/ y# _" ]* ?
( P# V$ c% b! Q1 U; w) f- i7 p$ k  E" V: n

! I. |4 `  f& |1 q, x3 ^" M) z3 }% ~% j/ c; G( }# M
5 Z, |6 E8 F$ X% v( [# S* s% }! @
分享到:  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 */
, d) M( M* G, a  F! ?+ {Program.heap = 0;% ~' P) b/ g, A( }( c
Program.argSize = 100;  /* minimum size */5 Y, g( r$ c7 ^
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */# K6 i2 `: m* e# M' A% O( ^4 }
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 p/ c) _7 V/ g! z: l0 W( t
var heapMemParams = new HeapMem.Params();
2 l+ U* }' S4 k6 @3 E* SheapMemParams.size = 0x4000;
( L5 V, s0 j& v( |0 `/ O4 y" ~0 U
' S; K1 T) B& R' w6 m. a! a/ o2 kvar Memory = xdc.useModule('xdc.runtime.Memory');: R9 g. \, C6 J+ U/ R; c- R+ F* |
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);0 k; M& o7 y; K7 y0 V
6 ~: I4 _% ?5 u* |" G. R
我大约calloc  每次共计大小为5K*16bits,3 U1 ?% \' p! d3 P: r
而默认配置才0x4000、需要改大。
1 z; O; n; `1 P" O9 \8 Q
# M5 L) M- q/ U4 V2 e8 \
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
! H9 h( l/ i% T8 F2 d% W我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 H1 p& D: W2 I' I0 ?% t
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 f: R& n  {, v# E) P
' o- j* F  H/ S4 i' @3 i
是不是需要在DSP.CFG中进行配置
2 {0 b$ k" s4 K( L1 }我现在的配置为- ^: \7 h5 d  \4 ~/ N" g; ~
" F2 T' `: l$ r
/*
6 F, z& T- M7 J0 l *  ======== Operating System Configuration ========6 v1 s( M2 [8 D) c  M
*/
4 E$ c; T' D$ u
; \% h" P1 ^  ]1 X# l, S/* no rts heap */1 c7 t! {9 [# N% v# q, f
Program.heap = 0;- z1 ~1 Y5 k7 f9 }5 i+ B# d- e
Program.argSize = 100;  /* minimum size */- ^/ j/ N5 |7 X
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
5 Y. s- w( n* D# e7 K& A5 `6 N" _5 q& m: J$ H( z& p6 `
/* create a default heap */& i! s4 N8 d( \$ U- @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 ?4 b& U# Y) p2 a, O0 c; Z# h" r7 D
var heapMemParams = new HeapMem.Params();
- Z- W. I- g# c9 _. }/ a7 P, S, WheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 e, z: l& |" n; f  j0 i: R1 D+ R% _
& X7 O. q6 [* d% V# R2 C( ]$ O" K& N
var Memory = xdc.useModule('xdc.runtime.Memory');
/ }* U) \6 Y1 K, E% aMemory.defaultHeapInstance = HeapMem.create(heapMemParams);" H9 L. O! c% c; Q9 m7 D4 e; l! y4 _

6 V3 d- c( }. e  u/* configure System module */2 Y7 {1 K- l) O. |# m$ }# C
var SysMin = xdc.useModule('xdc.runtime.SysMin');+ @  C: N/ \6 h6 X
SysMin.bufSize = 0x1000;
: @" V0 j5 D4 GSysMin.flushAtExit = false;
1 `1 Z! j- x7 L3 K" a
% X& a& p' n7 u0 F# }var System = xdc.useModule('xdc.runtime.System');; K4 T* k! O: T  d' R* w- \
System.SupportProxy = SysMin;, S( B5 @+ F( N$ \2 R9 c4 N& v
) f5 A5 n" \4 }
/* configure SysBios to use the lower half of Timer 1 */- V9 Q& f# ~. R5 V# h
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ y2 H2 c  b* p! ^: `# m' e1 B
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
, r" d) j9 d! J4 U( f. B' cTimer.timerSettings[1].master = true;1 w  u" Y% {2 l, n7 B& _' _
Timer.defaultHalf = Timer.Half_LOWER;! d: Y5 ?% f) B/ T% G4 {% Q
Clock.timerId = 1;# i7 ^2 N' y2 P6 X

- y+ ^8 Y* L, J' {, v3 `" b/ A3 @' x) W& q
/*" o, m( p2 k% r) B2 z
*  ======== Miscellaneous Configuration ========
2 @0 ~) ^8 j2 p, E6 q */9 |: K' d- Z; C

' v1 Z% }& s. P- V: r! u/ Q: v/* set default diags mask */7 d; T2 U7 n; B: @' G' K
var Diags = xdc.useModule('xdc.runtime.Diags');
; k, L  e: k( q5 x* i5 hvar Defaults = xdc.useModule('xdc.runtime.Defaults');9 B9 O* i" `9 g4 Y) G* I

( d# i6 z3 b1 ~Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 i3 x- A' w6 i! h& v! kDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% {7 H4 K5 B* Q4 L# ^
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;( a* x5 S% b' [$ j2 r
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' K0 {4 t+ G; wDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 v! \: w* X& k) y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;! _- d- N( J0 Y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;7 O4 A1 @0 o4 G
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 M$ k& J& h& m+ D. UDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 K8 ^; M6 i- \Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 c; m- k  E) a- o7 S
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: {/ b/ K& n3 FDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( A1 L0 ~' U2 Y- T! ZDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
4 a. L% B) G& O0 w$ S4 J( h5 M- ~3 KDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) z3 {) C/ `. V3 b
' O6 N' _* Q5 S: b- g
/* override diags mask for selected modules */. t% n4 {  P9 ?# j. ~* a, ?+ t1 y
xdc.useModule('xdc.runtime.Main');
7 X6 m" H! E( M: O5 y1 sDiags.setMaskMeta(
& e! X) S" h, L$ T    "xdc.runtime.Main",
4 C: O( ]$ }( T/ }    Diags.ENTRY | Diags.EXIT | Diags.INFO," W/ s4 z. P3 g! _+ c1 o  q. q8 I
    Diags.RUNTIME_ON$ B. M" F+ S/ ]7 v) K6 u2 _
);
8 _. V$ r7 {6 e* O: j
6 L- X/ o1 ?3 z) nvar Registry = xdc.useModule('xdc.runtime.Registry');
7 k# R7 @: T+ \( ^6 i! s: S' S. dRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; M* G8 x8 I; d" _$ H' r/ }
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 I+ x5 D7 B. q. k% y+ }( N, Z
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 ]" V' a; V: U% S( J# l
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;: J  Q$ j: |! V% H( a

5 l  e3 [* ^# \8 `/* create a logger instance */
7 |% t! J1 A- l' Mvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ C  ~6 g; y" H  I
var loggerBufP = new LoggerBuf.Params();
6 o$ @6 R4 j* h+ X9 N; x/ yloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ Q  W, n2 F' n) i, A  ?( z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;. X5 S4 ]7 F) V3 z( q( S: m. g$ d
7 \' B# B3 E& ~4 M
var appLogger = LoggerBuf.create(loggerBufP);
) G$ R: T5 w7 Z$ K3 ~1 V3 |appLogger.instance.name = "AppLog_Core1";5 [5 }' [' ?- _4 a. U+ Y
Defaults.common$.logger = appLogger;
7 _, Q0 R. y$ A8 y. bMemory.defaultHeapSize = 0x8192;   
( J" v$ T4 p: e6 @Idle.idleFxns[0] = "&LEDStatus";: p3 f7 H: w: c% w6 P5 l9 c0 T$ e  O
Cache.initSize.l2Size = Cache.L2Size_32K;
- h# O/ G. x. G
* s* v2 A/ E' ?9 s. m
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-10 08:18 , Processed in 0.043590 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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