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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构% B* {6 l7 p0 F- \  V

' R% o+ d" G+ K5 L    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# w. z0 X3 M7 q

3 J' P8 S. z+ Q! r其他程序段。。。。。
3 X7 E7 A4 C$ ?' U' P - s, A, W! _! c8 h  k& ]6 n
   free(x_d);
& t2 W' V; M$ m1 w+ j
' s8 @# ^. o# T  g1 i0 ^# ?2 H使用DSP侧单独调试功能,验证动态申请没有问题,: ~4 H) D7 s& V4 ^9 l( `$ x
6 @' a" r, r6 z8 h
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。0 r4 ~4 p5 I; n
# Q# l8 c7 i- e9 p9 Z
0 L. d. s- W$ Y$ D8 k" Q  R

# e" I/ z7 ?9 D# [( Y
- J. y8 K7 {6 ^& Z5 l
( i" i) m% |  y; p( n2 r! U& A0 y& l) P0 K5 V* M1 W9 L! c; Z. N8 R, s

4 p/ {9 k. o# Q2 t
2 j5 t) A4 V; l  |6 c5 P) V8 B1 d. P' t$ e( j+ Q. P

7 h1 l: q) C" W) g" B! K* Q- ]" E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  O3 _+ {( b* Z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. g& i9 R; c, T$ w  q8 o2 e(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
1 v( @; l# W) m% W- C! H; {

4 d& z+ L; Z! s3 c5 h0 F9 q: }$ b是不是需要在DSP.CFG中进行配置9 K8 ^& V/ Q6 U+ ]5 U1 ]0 A
我现在的配置为
' K# B! E" I0 u' Z) w
, B4 i0 J/ l  r' J. H/*8 u/ q, }& L: n! Y9 N9 a1 C- u
*  ======== Operating System Configuration ========
8 A1 o3 d1 N* L* B. _) E */0 v; m% g+ d5 }9 Z# ?" W3 L
( G" ^1 r  B( L) w7 U+ A  A1 M# T3 v
/* no rts heap */& `' J0 c: c. l5 d, [$ l
Program.heap = 0;
% G! k" I% D) oProgram.argSize = 100;  /* minimum size */6 J. [: I8 e# W* E" l8 E. l
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 M: l. P6 \7 _4 S& S& e! W  d- B0 P  e5 e" E
/* create a default heap */) D  e9 ?7 A0 t- U5 \' }
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 x; r! J: y. L
var heapMemParams = new HeapMem.Params();
% b) G  W' S4 I% \) |/ XheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ H/ a! t" N/ s9 e

- h1 P" a' A+ j" G
var Memory = xdc.useModule('xdc.runtime.Memory');/ g5 k1 B; ^* S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  e5 s6 A. C1 X: t! _  Z0 ?$ f

8 w8 [3 p, H0 J( A$ o/* configure System module */
; k! B0 r' F( L+ O, }9 yvar SysMin = xdc.useModule('xdc.runtime.SysMin');
- {' u" `+ }( J7 ESysMin.bufSize = 0x1000;
: j- o' F" A$ m* S2 _3 H7 ESysMin.flushAtExit = false;3 d; Q" I4 y; I2 Q7 A

. B: i, z3 ^; Uvar System = xdc.useModule('xdc.runtime.System');
6 m+ y$ y) K2 h- w/ O, n& BSystem.SupportProxy = SysMin;
  q3 g) ^& ]. Q5 e$ y
7 V1 Z$ L8 p% O) `: {5 m% X/* configure SysBios to use the lower half of Timer 1 */
  @2 q8 Q1 O$ G$ B. ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ _* I; `; `  ~- ]
var Clock = xdc.useModule('ti.sysbios.knl.Clock');6 }* n3 b" j4 H; m
Timer.timerSettings[1].master = true;. R. n2 E9 Z1 Y/ w0 ~
Timer.defaultHalf = Timer.Half_LOWER;) Y! m/ N( A2 R
Clock.timerId = 1;
- k: @1 L( d* k# u2 T" X: k! O; x
) T" i. F& J0 U- [* {( E* ]$ d0 I9 k, v
/*
  G# @7 b8 t) n: t6 ^9 Y0 A *  ======== Miscellaneous Configuration ========) M8 R. `8 h+ ]; D! {$ M8 Y
*/% I2 s/ G+ }" I. y! K

# h3 n  ^' w0 t6 `1 u  K/* set default diags mask */9 ^3 K9 \$ x( i0 W) I) F
var Diags = xdc.useModule('xdc.runtime.Diags');
$ O* M& f2 j$ y6 L9 xvar Defaults = xdc.useModule('xdc.runtime.Defaults');
2 U' B% ?% h0 ^: i4 m! b& C  S" o4 P+ `% o- p
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;; }& f. W) G" r) n1 p. }
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' N  x- T; e  k1 |# G- s
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% q$ l2 F  _; c5 U
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# a* }" x! k: b  GDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& Z; u5 ]) L& K4 h+ }2 S% {Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 |& ^9 @7 z6 a1 _Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ K% w9 E; z: y6 @& t5 L, T
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& p9 ?7 g' |' c% N9 d
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;* E1 m, y$ X  b/ Q
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, N4 i3 R, c4 fDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 r1 S% W$ V9 b6 B* p2 R: bDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, E5 x* C' _; D. z) ?. s
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) W- L2 s9 [4 q. q0 `- w$ ]! @Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
. C; _, t" v# f, v0 u
# C* `; B2 E! n% o# |/* override diags mask for selected modules */, ]1 t; j) o5 J4 `0 A
xdc.useModule('xdc.runtime.Main');1 z* d. u) U/ ^0 M( ?) l8 u
Diags.setMaskMeta(
' [8 F6 V6 X7 G2 R    "xdc.runtime.Main",, o% L7 \+ {9 ~. S
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; i& Y! ?2 S5 k    Diags.RUNTIME_ON
8 A1 U3 X( D7 U: K' b0 [& C);  ?4 t7 m2 T8 K; T
" j6 _2 j0 R9 p4 J: k, F
var Registry = xdc.useModule('xdc.runtime.Registry');
7 l1 x; G, ]8 g3 E" l& G0 A" bRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 X; Y6 H* @$ @3 C' L- Y. n% rRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  E+ f3 y  H0 P2 Y* H; m: E) uRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
/ Y& |9 J9 C0 D7 O& ZRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;6 }! f' g* v- m3 X4 H
3 x* K5 d* W' u' J
/* create a logger instance */9 X3 l# m" c( C1 D7 s- c: u
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
5 I# r! N- }! P, B3 Svar loggerBufP = new LoggerBuf.Params();
; H# D! [. J: s5 r0 [0 ]6 T' X/ wloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */, \5 B- j  q4 P0 d
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
- o0 w5 t, q% P# N( y2 t( J5 j  T* q
var appLogger = LoggerBuf.create(loggerBufP);
" t, c2 B8 g2 T( {appLogger.instance.name = "AppLog_Core1";
, _: f: Z4 d5 }) }Defaults.common$.logger = appLogger;
8 W- o& [. `9 t  Q6 D* GMemory.defaultHeapSize = 0x8192;    6 T9 F! h# M9 M& _' S  t/ W+ e- s
Idle.idleFxns[0] = "&LEDStatus";
: R& k* @% u: P3 B! a* J! v# wCache.initSize.l2Size = Cache.L2Size_32K;+ [  ?4 V) p9 S' j( I  x

  j0 w) L/ H8 p* g( O
回复 支持 反对

使用道具 举报

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 */
* b0 A$ J4 R6 _7 ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" L7 g  I# R: m- y) l/ i( h
var heapMemParams = new HeapMem.Params();3 D, Y+ J9 ]8 o8 i8 |0 t2 O
heapMemParams.size = 0x4000;0 [, D) M. a7 J* w* b5 }
/ J. ]& w. l, f3 y& ~: j
var Memory = xdc.useModule('xdc.runtime.Memory');6 \2 k' s3 z3 z7 p' R
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* |- N+ S, f7 `1 y- a$ c. t' {; R! L- W2 l. c
我大约calloc  每次共计大小为5K*16bits,1 b: ]1 ~( Q1 V! U
而默认配置才0x4000、需要改大。
  u& x. p' ^5 {( b+ V; k0 m8 b, Z+ Z- N
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
& V% G6 p* e" q' H# A) ]" DProgram.heap = 0;
  h" H9 J& e2 s' y& X! _7 X/ hProgram.argSize = 100;  /* minimum size */- i( |. O) T; Q" {
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-7 18:07 , Processed in 0.042667 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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