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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& v, H  ], R  o4 L
0 S& J1 ]. [9 |9 v) o
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2567 Y1 D! l  b" J0 f
9 V- H9 ?- S/ p; v
其他程序段。。。。。
& w2 ], z5 a' C$ g1 I. P, [- t 5 L' @5 w- w0 j' X
   free(x_d);) S* ^) j# C: [

1 I& i5 k- T( U: F使用DSP侧单独调试功能,验证动态申请没有问题,
! Q% P* X6 \* N. r9 T" X
0 y8 O* r: T7 d: F) s. K但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 i( l% b1 c+ a! Y# H3 {
1 M9 w$ H; {( `" Z( c9 _
  u/ Q! g) D) I8 Q

' n, z2 h. S  c2 d
' r$ E+ `! X5 H7 O
2 J" `7 D4 u8 z% A. a. q! i5 w! @8 `+ m4 m2 h# t9 R+ N

' H9 H1 n# g4 B& N0 d! X4 V. ]7 T( H" T5 Z" F+ a! F7 u

+ E( b$ Y2 p# @9 D. [
4 a/ A' S9 L9 {% t3 U; Q+ Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
. X6 e7 [& a0 s7 ]+ N7 G我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下3 S0 {* L; H7 \4 C
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
+ W4 E7 j% H6 [$ P
9 i; [1 S: Q9 X5 b* {- A
是不是需要在DSP.CFG中进行配置
" i1 M& I4 e0 x我现在的配置为
- |8 K8 r* C4 V2 G8 j: c* _6 O  Q$ |" V; `
/*
( b2 D6 y% _! M! S% Q *  ======== Operating System Configuration ========
3 M( x1 W4 @1 }7 i */# N7 Z- l# I* o: i8 }+ |

1 W& K# n& V; `0 w9 z( d, k: c% Z/* no rts heap */3 W; m; _( A! ~8 a* s+ s
Program.heap = 0;
- |2 E* o4 |0 a, |Program.argSize = 100;  /* minimum size */* \& N& V8 v, Y  J7 C2 w( b/ Z1 K8 n6 E
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
  G0 {8 z4 c* W$ L" U% _$ K8 u
/ O& K. F: ~# e( A1 Y* @/* create a default heap */# }2 Z* w1 B* k* P% m( V& X
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 w$ v2 N; _" R8 k+ P8 P4 g; }
var heapMemParams = new HeapMem.Params();' R1 e  E# U% J8 I2 o7 T
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: |' y# I% t% A9 ^3 I5 a% j$ c* z
# Z9 [2 O" d, u: z3 @7 {
var Memory = xdc.useModule('xdc.runtime.Memory');7 r4 Y$ ]: e8 j( x! Z9 h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" H7 U, W3 h) _4 J5 J3 x" N- S+ U/ V& f$ v

6 X7 ?1 l" C* H/* configure System module */
0 C# n3 P, J6 `5 ~. @var SysMin = xdc.useModule('xdc.runtime.SysMin');
" m+ f5 {  ~% D: iSysMin.bufSize = 0x1000;
8 N5 O. S, i3 _SysMin.flushAtExit = false;- d7 ~& D( p8 j. K: q" O
/ q0 W' ?# e. |! F9 g. B. \
var System = xdc.useModule('xdc.runtime.System');
; C9 j- B- S# ?& m4 TSystem.SupportProxy = SysMin;2 `+ x. B) o" F$ u' I/ ]

$ J8 @% P0 s' s9 J/* configure SysBios to use the lower half of Timer 1 */
' u6 v+ O4 F, L( x# y- x, Pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 a& |9 e3 z: G+ \1 E* F' Z- Svar Clock = xdc.useModule('ti.sysbios.knl.Clock');$ J5 J# e4 u# c$ c
Timer.timerSettings[1].master = true;
9 }8 x% K$ B6 p- ~; {Timer.defaultHalf = Timer.Half_LOWER;
* \$ t8 [, n* y3 BClock.timerId = 1;& A' z7 x) N# K7 {, l: u) l
2 V) X9 Z; A' a; M' p
+ H! j$ X2 P5 s5 J- v: v
/*
' `" E$ j* L$ D0 o/ y- \ *  ======== Miscellaneous Configuration ========
6 G6 a9 d' {* i0 o */4 F! [' k" Q2 c2 n+ `
: h! x1 X& B! M% n. E
/* set default diags mask */( }( r$ `/ ?) f
var Diags = xdc.useModule('xdc.runtime.Diags');+ a( }. \; ]1 _5 w6 N5 n7 n
var Defaults = xdc.useModule('xdc.runtime.Defaults');: ~% V6 z- _8 g' C" j; e7 k5 C

* E9 o. f/ M0 k- J! rDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" t' V' w. s7 [1 q4 W9 @+ g7 xDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: P  q) L5 G3 d9 B/ c
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
1 _/ q9 [- D1 R+ \- DDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 g5 F7 Y! K3 d7 Q/ L' nDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& D! F* T  L) C; I$ j
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ }0 N" e0 t/ ADefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;" r% J' |  P8 }2 S# K
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
' A2 u  y! f1 aDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! {/ I/ F9 E. t! \, DDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: I# w: q. ?2 J2 n$ F0 GDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! }& R  f( Q3 I. v& DDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+ l- y- U0 X( T6 k1 QDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& w/ ~7 t2 @3 Y/ u, F+ EDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ X1 k# f! C0 Y6 _! `& u4 _8 ~) D! @, v- F: j: j' u  w. ?8 U' ^. G* ~
/* override diags mask for selected modules */
0 T" }: V+ ^* H& Q  mxdc.useModule('xdc.runtime.Main');
( e$ _. Z+ y6 C- T( ~% T9 o3 ^5 W. MDiags.setMaskMeta(
( E5 d: Y# L- H, Q8 v    "xdc.runtime.Main",
) a) R) G. h: K- W& D+ z    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ {1 H2 T) i9 D5 \8 `. r
    Diags.RUNTIME_ON* ^4 T9 T8 [& J5 L7 m
);
; `! j8 E, p  }" b
) R9 p# ]0 f3 x" ^5 ^! Nvar Registry = xdc.useModule('xdc.runtime.Registry');
! n6 N! ]0 N, z( s" D/ uRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ ^3 T& A0 d( S) w1 E3 Y3 h8 ERegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
: s7 k; H" x! KRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;; B  i8 x% E  Z/ f9 ^
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ v  [9 X1 r6 @5 B& W) W; R
- h1 g6 D' S6 U6 D' k: h/* create a logger instance */
4 D. }+ t# V" t" }# E* V  evar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 F5 F. t( L# I, S* Z5 S/ y& m$ x
var loggerBufP = new LoggerBuf.Params();
: J* V7 i# h/ ^6 T# W. b% ~loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: S: A6 q& @. CloggerBufP.bufType = LoggerBuf.BufType_FIXED;
; K3 I+ O( Z0 G' j' }5 ?, F$ b, k& c$ l
var appLogger = LoggerBuf.create(loggerBufP);
$ ]1 Z9 S5 A7 z) k: E. k1 QappLogger.instance.name = "AppLog_Core1";
# Y+ m0 y3 B* t6 H4 a' {Defaults.common$.logger = appLogger;( ^9 k. [6 D4 _5 W" u0 {% _
Memory.defaultHeapSize = 0x8192;    2 _  G0 N3 Y# k" c5 N/ C
Idle.idleFxns[0] = "&LEDStatus";9 d: H0 U0 C0 [# x* `" u
Cache.initSize.l2Size = Cache.L2Size_32K;5 i# k9 ~2 l% D
" I4 ~1 U! a. ]/ Q% F6 F8 G: H
回复 支持 反对

使用道具 举报

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 */6 a2 e) D* M4 x5 `5 J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! c9 I7 v; j5 H8 F
var heapMemParams = new HeapMem.Params();6 F# o9 N8 A, d( p: \9 U$ ]
heapMemParams.size = 0x4000;
$ l% c# x9 n) i4 C
/ c8 x  f6 w: C0 C, S* _, f/ ?& gvar Memory = xdc.useModule('xdc.runtime.Memory');
) Y* [- m; e' H! Y$ r' y: ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# M! s4 `2 ^  e& u- z0 ~! H5 u, j; }& l

9 Q7 z* s5 Y& B我大约calloc  每次共计大小为5K*16bits,' _& p, ~3 l9 v: l& w
而默认配置才0x4000、需要改大。( H2 u7 |1 N2 `
. x; ~- u+ F- y% D* @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */7 S! j+ J' t; S0 p% l, U
Program.heap = 0;  M3 i) V+ N4 J
Program.argSize = 100;  /* minimum size */0 r, _2 [! q& U5 s- U' @
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-31 01:18 , Processed in 0.055209 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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