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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* a$ w; x& h+ @
! i" m+ E* o  b5 m- }0 g    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ n8 v2 o% R( B4 s9 T' {8 t
8 D9 j* F! ?; c6 N; M
其他程序段。。。。。
  X" p( U7 o% G: Q# m6 U . E( b1 z7 H) f" X. b7 r, v# q
   free(x_d);; h4 v6 S) N% Y( j( [: C

+ p5 d7 X7 ^! U/ D4 k0 L7 h$ G使用DSP侧单独调试功能,验证动态申请没有问题,* G6 J9 E- b0 z* z( K) u

7 H: O$ O3 g, X7 v但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 L/ i5 z7 j  |  Y  O( R+ ?

" _/ b, m8 d* W2 T/ n) l" x1 {/ S7 a, H
1 X7 c0 s- |2 F6 G# B8 z
- J) S5 `; u2 z% w9 `4 e6 X. {  _" _# i
; m! a! e( l9 x* S
! Q$ B: d& D0 F/ N5 f

( A8 Y7 g" y2 N( _3 w, @  R/ d) ]$ X* s" d2 l5 m" a# p% ]

- d! ^3 c" {! ?2 Z& `
' V! L2 y3 s" \/ J  _6 _8 U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- `* E* O) h3 X0 ~# u7 v  e6 I
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 ?& N  L" c* G# D2 K- P
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ _& J. Z  T- u0 [7 {' l: E) C3 m
# I: z% T% f0 \) X- y
是不是需要在DSP.CFG中进行配置+ Q! r6 }# ~5 H
我现在的配置为0 ?7 H" O8 l' ~$ `3 A+ C. |( J6 X) u. W

/ q$ h! g" ^/ t/*
6 S+ L5 J! `, Z* _7 b2 B# U *  ======== Operating System Configuration ========
  u% G6 C" \' X& T7 c- [: N* K9 @% W */
" W2 J: A4 V, A* V/ Z. F, a! X& n* r) o
/* no rts heap */
( L3 s/ A7 g4 i, MProgram.heap = 0;+ Z# G, p5 m& w& d. r
Program.argSize = 100;  /* minimum size */
, X7 I* W* z: e) K/ dProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 K: ~6 r2 D# S( I% i: P1 D

5 d" k$ C, y, ~% V1 b3 |  O4 R: g9 o/* create a default heap */  r% ^# t" S, y' z1 {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 p" _" {' J1 G( Z! q# Mvar heapMemParams = new HeapMem.Params();
+ Y% `: q5 n& h. }, K# DheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ f+ S- R; D8 _: @+ ~! t* h, y7 k
var Memory = xdc.useModule('xdc.runtime.Memory');
2 P( z  m) s! E9 Y+ o) S  IMemory.defaultHeapInstance = HeapMem.create(heapMemParams);0 E8 u- A* S# u3 X. [

- p0 `* [7 q" [5 _% l/* configure System module */
; r* q7 c: D: Z; fvar SysMin = xdc.useModule('xdc.runtime.SysMin');" ~1 j) E4 c' k7 V" U4 O
SysMin.bufSize = 0x1000;: ]5 `1 v8 F4 G/ T3 n
SysMin.flushAtExit = false;# x% ?2 v# j5 e  i& b0 L
9 X" E, h: U: A: c, T2 }
var System = xdc.useModule('xdc.runtime.System');( L$ f1 Q/ ^6 f' R7 P8 [# A. ^( Z
System.SupportProxy = SysMin;
- b4 P5 |% q5 @6 E
8 Q- G7 D) i) w4 A/* configure SysBios to use the lower half of Timer 1 */
# T# R3 w9 q$ xvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
% N4 C& [" ~% A7 j' n! j1 }var Clock = xdc.useModule('ti.sysbios.knl.Clock');& R, @) f# V: I4 T+ T
Timer.timerSettings[1].master = true;( j  G2 ]) ^& H% {
Timer.defaultHalf = Timer.Half_LOWER;( R% M2 g. [+ \/ A0 Q5 X( y
Clock.timerId = 1;
2 I" E% f, d0 n/ K5 S0 m, r( |3 {
/ @# k* S* E: j6 |9 e3 c0 _& M8 c0 x" p. ^% L0 B0 X, V9 K
/*
6 i( @* a0 N3 F- r/ i *  ======== Miscellaneous Configuration ========" \; x9 r! R, h& R/ w0 x; y$ ?
*/
1 _* G( b- i1 |: B% S2 [" `6 V" q- D/ B* i: ?
/* set default diags mask */( y, R  X3 W: E, i1 s& p( H% L
var Diags = xdc.useModule('xdc.runtime.Diags');/ O8 G8 G/ J# y1 q( Q3 q" V! F
var Defaults = xdc.useModule('xdc.runtime.Defaults');+ ^6 q3 b7 y/ H1 \! j0 }

7 A  I- J- Q) `: `; [' O8 yDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* o/ W8 B0 s3 @. Q3 }Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; C; y! W; X  K; H: QDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 N* k& {& I+ E/ s3 |+ S
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */" e9 d* t' q  |7 i/ ^# s6 F
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */: I! s$ Y) ?4 t7 A+ t3 f
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;) v, q/ |9 C0 l: t
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;" z: t% e$ E, T( ^
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  B. G$ \" Q1 f; [, JDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
' R" z2 h) i! V- d% V2 r* b/ BDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 L1 y2 j0 n3 Y+ \) N  h
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
) D7 Q, k: p* cDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- M8 f/ Q* `9 n' `5 m: o
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 }5 ~) Y  I. D) QDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 A2 K) Q/ h6 C; q2 e
" Q; `+ A- [$ o, k
/* override diags mask for selected modules */
* [( P. q  y4 W8 P4 f* l( k* wxdc.useModule('xdc.runtime.Main');/ p6 L, k5 Q) j2 `" S% U
Diags.setMaskMeta(
) J& z1 e4 a' R; l- v    "xdc.runtime.Main",
1 M) m) V+ B+ y7 t* C: h    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 F* r# {6 }6 j/ ?" J8 ], n
    Diags.RUNTIME_ON
8 q; v1 E! {1 n0 S' Z);
4 L( g3 C# P+ L- k) ]! U/ t5 G* k# C& }6 g, |6 y. y* c
var Registry = xdc.useModule('xdc.runtime.Registry');2 e2 r: K. Q9 |3 G! g$ Z; X& n
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
, W7 s( g) \* v) G2 V- IRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# `" ^9 Y- n% b6 S
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;" }! O( k8 \6 ]8 S- R3 _7 ~
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' o4 S2 f  X( y5 I4 C/ g0 f8 f$ }3 w, _( T7 h. |) N8 J. G5 M
/* create a logger instance */
( M" ~+ r& t- q3 `$ K! Xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 s' }/ ]1 Y& p& T5 ?- H
var loggerBufP = new LoggerBuf.Params();
5 U3 f, O; V: V5 z1 ^loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- x# X: t5 M2 C* m+ f
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 y( [1 p/ O) N/ F
' N- z8 }/ g& [6 h- S! d/ Uvar appLogger = LoggerBuf.create(loggerBufP);* y, M1 c& K7 m# g* d, {9 G2 d
appLogger.instance.name = "AppLog_Core1";
; u- [2 J& c6 A3 `  }5 sDefaults.common$.logger = appLogger;
  R5 O1 T: B2 F6 {0 S( \5 [Memory.defaultHeapSize = 0x8192;   
* V. Z( M7 ]: l2 [/ f' K; l, ~! c5 RIdle.idleFxns[0] = "&LEDStatus";
7 Z! v  R! f7 ?4 O# l& ?5 `Cache.initSize.l2Size = Cache.L2Size_32K;
2 X) |, ]" Z5 d) k& N3 ]! ~, B
1 O: C4 r! ^6 ~* Y
回复 支持 反对

使用道具 举报

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 */
( r" ]$ l0 P  g/ F7 M$ v& U0 hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, _  A& x6 n9 M  Cvar heapMemParams = new HeapMem.Params();
7 v3 W9 U$ \! B+ w( [/ xheapMemParams.size = 0x4000;2 O. L/ ^+ n, Z* r2 [2 O) n) D" r
" c, Q0 |! t+ ], a
var Memory = xdc.useModule('xdc.runtime.Memory');
3 e0 }/ s$ X2 h; k6 ?& U' [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ Q+ }5 a8 m5 m  U7 X
& Y% i  s2 H  W$ U" S7 L
我大约calloc  每次共计大小为5K*16bits,7 R6 ^- c! s7 b/ Q' e# d
而默认配置才0x4000、需要改大。$ s/ A+ p! `# I

" q8 q: V4 F- o! j! }) E+ n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
3 V3 M7 s, a0 R; {Program.heap = 0;: V' F: x, m. A$ I- y2 `
Program.argSize = 100;  /* minimum size *// J  n0 w0 s0 D- k) c$ v8 `
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-14 14:52 , Processed in 0.041685 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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