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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& T+ i* a( ]$ d* m0 x
( t# T: b2 i' C" Y# z* V2 I) j    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
$ j. t7 C. f: G5 O
3 m: [8 ]. m+ R; s/ _% G9 S其他程序段。。。。。
& v2 ?& f& c2 {' r2 E7 ?5 j: n5 S . t$ U+ z. m% T3 I
   free(x_d);: P* Y# P- }" e% ]2 G

  g& k8 i$ T4 o  v$ e- p& }/ l- M9 s使用DSP侧单独调试功能,验证动态申请没有问题,
! n. D5 U5 D+ d" i+ V, ?- u" g  r( X1 q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。. u- I  ?# e% v& U7 X; y# j# O& v# w; j% U

" e( B/ D( y- a1 d& K" E! V7 d, H: {+ |) c4 ]: E' C) M; ~
' i2 F! R; z( K  Z4 }, j& o9 T6 R
$ b9 @8 h$ I% N, ]- M. H8 h4 T
: v( C, o1 T# o! G7 o8 J4 v0 |

' e) Z# m' q) Z( a9 f
1 \! A$ ~( J; Y4 y8 N% }# q% J- _) g2 A- l/ V

# v, ^3 U5 L9 M, c9 q1 J0 `
- L/ Q0 U5 k6 y8 ~3 a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  K9 h4 o+ j0 G' r! n. x5 Y& h我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
6 F: r5 Z% b' L: ^% A(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 N5 b) J$ A8 N1 |8 u( S9 v
; B6 `) w7 G4 d3 B/ b, t- m% k) j
是不是需要在DSP.CFG中进行配置/ U# z2 p2 o5 n& d) @
我现在的配置为& p) M" Z0 i1 s
) s) i, b& ^* ]; L. b
/*% n1 [( l, H" _
*  ======== Operating System Configuration ========
- h7 ?+ I/ H5 ^$ d# P+ { */# t2 x7 o& p: C4 R# j& A  \

/ E, W. ?% Z* h8 ?8 d$ C8 M/* no rts heap */
; n( J: q/ V6 E0 S2 \2 [Program.heap = 0;) M3 L- A% f( r; G% E
Program.argSize = 100;  /* minimum size */
5 G3 x( H: V0 G0 K5 @Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
& H* ~% K& {/ E1 h' i0 A" y
( E/ @. P5 n! e6 b$ E" _/* create a default heap */
; W! i" J0 c* t, U6 k4 F" h0 dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 U2 W$ T; K5 W- T9 Wvar heapMemParams = new HeapMem.Params();
' v) r# U. `' U; W( uheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
; q' T+ W. h8 q5 i. d$ |% f& b4 I9 T( ]
var Memory = xdc.useModule('xdc.runtime.Memory');
2 q( a% C' u# r1 h& uMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 d" _0 k( o1 U: F+ }8 E
5 f& g. ?' \% {$ ]5 E5 A/* configure System module */5 ?. \+ L4 R7 E
var SysMin = xdc.useModule('xdc.runtime.SysMin');
) |6 v* u4 L  e, Y# TSysMin.bufSize = 0x1000;
& {  ]3 I# F0 h# |8 Y/ H- gSysMin.flushAtExit = false;
) x, p0 i# H, Q4 E: c% j5 S* @; a9 d
var System = xdc.useModule('xdc.runtime.System');
7 c0 J) x. ?, B  {) n; Y0 eSystem.SupportProxy = SysMin;
  T; L# P5 Q. c5 J/ |( C8 _  v0 ^* s/ Y: A
/* configure SysBios to use the lower half of Timer 1 */  h: [; @4 o  \# s$ U, ?
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');5 d1 d$ O: \% V- y/ w
var Clock = xdc.useModule('ti.sysbios.knl.Clock');3 K2 z8 I$ H1 R  q7 J0 @+ G- j+ s
Timer.timerSettings[1].master = true;
1 b, K) l  {" C: ]Timer.defaultHalf = Timer.Half_LOWER;5 F0 |/ z0 f' S7 d) _
Clock.timerId = 1;- Y9 s3 w( P! b, Q4 _6 F

$ v/ t4 |+ r2 f7 a' L4 L- }3 x2 {/ h% f3 Y5 m7 G, Z
/*4 P. z, V" M& G/ T' m3 x  n
*  ======== Miscellaneous Configuration ========
6 a; P- ?/ R/ L/ b */4 h: s; T( L! l0 f7 Q+ I1 j6 N# A

# u1 O2 _0 L. r3 N/* set default diags mask */
$ k$ E3 S! F6 C1 P1 Avar Diags = xdc.useModule('xdc.runtime.Diags');* `8 F+ \$ Z5 _, R. j- g9 \
var Defaults = xdc.useModule('xdc.runtime.Defaults');
3 N/ d1 z+ U0 y
( f3 o# O' j" `! {Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;8 a1 R  Z8 o* ?9 d/ s5 h0 n7 X) [
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; X+ e, n3 d5 \, O0 G/ T! {
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 X( W6 G, C# u$ xDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 K3 w/ X" D+ N3 G
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; M0 X5 R! x% _6 KDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
! `7 P! ]! f6 j; s1 G. qDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' o9 X: v, [: O8 uDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;' l5 t" K) W' w- {4 E  O5 P) S
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;! G% K; @% Z5 I* }7 |6 d5 m7 T
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;6 x+ w/ y8 q& l% J) s, v
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
) A1 {$ j3 ~1 l/ ?; G. pDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' e- c8 Q6 v& U! i- ^
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, G! n& }  e' i7 BDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ x$ p( U. n+ o. O7 ^4 `! J

5 F# ~5 c5 G. @( G7 v/* override diags mask for selected modules */$ T& e5 ~% w' M; t" ^* \3 u
xdc.useModule('xdc.runtime.Main');, z5 B& ^3 m1 v' L. q, g9 w) j
Diags.setMaskMeta(
. ^* G3 U2 z  U2 I0 r; p    "xdc.runtime.Main",
0 B6 c; }5 z' ?* x  g    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 T5 t( c( X' h: Y6 B8 S. N2 P    Diags.RUNTIME_ON" o  w7 c* O+ G2 t" m
);/ {; U8 p5 G7 n0 n6 A- {3 o/ B! C

* ^' w+ y2 ~. g+ Pvar Registry = xdc.useModule('xdc.runtime.Registry');& F. v- Y' k! ~; A
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
5 k3 E, }5 S9 l2 J. E. }0 |Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 g- [# u! E' i7 n, d5 Q
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ k7 Y+ j9 ~. _8 `
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;& c1 m4 H9 |4 M% ~0 A
. q" E7 R1 c4 F! E$ C
/* create a logger instance */9 r# @- t) m" l) L8 g
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. [4 I9 |% l8 Yvar loggerBufP = new LoggerBuf.Params();4 ^) N' u6 W" y0 E, s" s3 ]
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
! Z, v- U- C: ], V* D1 RloggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 u: j# E  a; [- `  i' s; ^- L* K; U( g3 U; {! u0 N% z: c  g" G' v' g# e
var appLogger = LoggerBuf.create(loggerBufP);
6 w0 H$ g7 S7 {: [appLogger.instance.name = "AppLog_Core1";* T) |" A4 d3 X' ~3 n6 |8 d
Defaults.common$.logger = appLogger;
# a+ ]4 L, `2 T, V7 |$ ~Memory.defaultHeapSize = 0x8192;   
1 e1 t: @6 l- |Idle.idleFxns[0] = "&LEDStatus";  i7 F- ?7 o  g& w( E
Cache.initSize.l2Size = Cache.L2Size_32K;
  Y& t/ v" R3 l8 K3 k4 Y
+ K' Y7 k9 `8 J6 z# r
回复 支持 反对

使用道具 举报

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 */& W" d1 W& e7 w, G/ M
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 s- j' L) [8 b& M, k
var heapMemParams = new HeapMem.Params();0 H( `3 x  Z! _
heapMemParams.size = 0x4000;
; h' n/ t- h5 k. C- c1 f3 q' S% ]; ~# |6 Z: N1 H& J( B& _
var Memory = xdc.useModule('xdc.runtime.Memory');, _* y' A% ^# n& |+ \/ N* _. Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ d3 \$ C" l  U* ?2 n0 p( ]( @! p% C6 n0 [1 J1 A) E& P
我大约calloc  每次共计大小为5K*16bits,
$ g( c1 r9 f( D. j而默认配置才0x4000、需要改大。6 K6 G% W5 y% ?# G4 l5 Q
& ~7 M. ~+ D' W3 R" o; S- n3 H
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. k* }4 `% L6 ]% B
Program.heap = 0;
% ^7 c& @; }  P& m9 z' J1 _Program.argSize = 100;  /* minimum size */; W, D5 S8 I5 Z. A5 q0 X
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-5 18:17 , Processed in 0.046310 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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