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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

6 |1 [* k/ y1 ~6 t- i  k: i$ w$ d    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
7 U3 u& `7 g! f6 F( Q4 b( V! D  H0 I' s( ]2 d( o* {2 c! u1 R
其他程序段。。。。。
/ \& k. @; }  E- I/ C* }* E
- B  a2 K+ `* L- _% W   free(x_d);
  d! I; I" D6 H
- |' e7 z$ t# F3 b  s' p" \# X使用DSP侧单独调试功能,验证动态申请没有问题," ~7 w7 \  ^. s6 F

$ t) N+ O( f. A! O. h0 {5 {6 N但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 Y8 m" k6 l* n5 m% |4 ^
: E! H  A; n; B! X1 l. O

# w9 Z2 n  Z: O& l, L. O" w8 S1 s  H' L; p. E* k8 r9 C

7 P# P! M2 d. M0 s$ B, `# n, p  l8 C
6 j' T1 K4 {4 W* ?5 f
& {# M; d6 j8 e: v* U$ r# L' p7 u: p0 A* h3 y. G

0 O4 S1 Q0 Q% J, G6 ]2 w* Z: ?
: v3 l) F+ B2 d: i
+ C( ?- F' k) X: e  q+ G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
. S! s% U4 }1 q我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& _8 V( h, ^' g+ d(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
0 ]: ~' k" x% q

* C" _' l8 t# k7 d. d是不是需要在DSP.CFG中进行配置
  t# g$ \. R! s- z% J( Z) y6 P% a我现在的配置为( h5 ]% S: I4 }  W
. D# i( R0 B# V$ t) y& l
/*: E, ?2 D4 B# X, ^4 t
*  ======== Operating System Configuration ========
( d0 b' M& P* |, e; [- @* x */. N+ H9 {) S1 {  p& z

7 {! e% r/ z" I% P6 C/ {) q/* no rts heap */: A" W! i: h8 l+ H
Program.heap = 0;
3 g3 w# m1 B4 [5 Z0 IProgram.argSize = 100;  /* minimum size */& S4 e, S! S# _5 l; F, K7 I
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' q/ }5 }# [8 v( ?4 ^, f

' C$ J# g. D- M( e/* create a default heap */" y( Y. G& l5 T7 O' K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( Z' J' H/ G' @$ r( t) i3 w6 K1 g
var heapMemParams = new HeapMem.Params();
5 L  N5 V4 {6 Z/ J$ ]heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大0 Q8 V; S$ ?, @  l! J; _  O

+ G3 |' X- q8 e. o# D
var Memory = xdc.useModule('xdc.runtime.Memory');9 J+ A2 {/ N7 T5 r2 ^+ m% m' O7 v
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 z. B. }; r8 g; k4 z; t' a$ k6 d- C! P0 T  o) C
/* configure System module */
5 p+ a7 W+ t. nvar SysMin = xdc.useModule('xdc.runtime.SysMin');
9 V3 F9 \$ ]8 T3 Q. ~6 q, @' KSysMin.bufSize = 0x1000;, j8 T2 h/ p& k! F
SysMin.flushAtExit = false;
9 E+ c* e9 h8 P* J1 g! x; C- U' o8 N, r/ Q# u% b
var System = xdc.useModule('xdc.runtime.System');$ w5 W/ D$ H8 L& F9 i- i
System.SupportProxy = SysMin;
- _( c+ k& x6 w' u. n5 l) }9 n) g, u
2 i# A- x# \0 |$ a! M+ t3 e/* configure SysBios to use the lower half of Timer 1 */
7 Y2 @5 b7 ]' H, Fvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& m/ h9 Q% d9 g, J& G7 Wvar Clock = xdc.useModule('ti.sysbios.knl.Clock');: d6 s3 w- Z) n- i
Timer.timerSettings[1].master = true;
3 N- o6 {% \, K) E) |- OTimer.defaultHalf = Timer.Half_LOWER;
) z6 @7 J  U6 P( h: i! A. F7 iClock.timerId = 1;
& y( }! {1 O& l0 w. t' p5 _7 o- H5 e: u7 z
; n0 P2 Q% \+ X8 h: Y/ d4 M
/*7 J4 |' F  G6 e; ~( x" A
*  ======== Miscellaneous Configuration ========
# _! f+ q5 G- G& f7 _4 ~ */
( {9 z- r4 s5 Y8 U& ]0 B5 y% F) F5 o% q' n
/* set default diags mask */) {* j9 f5 D) N: F$ F% F
var Diags = xdc.useModule('xdc.runtime.Diags');/ Z( a$ _- {- N, |; [
var Defaults = xdc.useModule('xdc.runtime.Defaults');  M( P, L) I: s, o. ], [0 r

9 C: S: ~' O5 L- k# pDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;  P% `: L' d% j3 }6 }, J
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& o$ n  C/ U( i; e1 J0 GDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 j% |% o0 B0 D& p% sDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ p1 U6 c! l7 F4 g5 Q) W6 M  _Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 I- ?( z: u: Q% K
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: t4 P0 a. ?0 p) u
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( U% F" @- I% x/ G9 iDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 K( J' P' h* ~Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;, D3 i/ r8 F6 l+ v
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
1 g1 S9 r2 @, Y3 X  F4 GDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) X7 h: z; U0 r; V2 x
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 p! r$ }! W. z* a: A) c
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* X1 H5 C, S, i: _- A% f
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ w, l$ j: W$ D# a  W
5 V2 K3 y3 \# K: y1 Q' t/* override diags mask for selected modules */
* Q9 F) H2 V& y+ p# m4 v# s* C' txdc.useModule('xdc.runtime.Main');
9 @& i1 N7 W. M5 F1 z5 t! iDiags.setMaskMeta(
& `+ D, E( [# h$ }$ K    "xdc.runtime.Main",
  J& B  K6 x2 i$ b* D1 Z. q    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- Q2 b) c, B" s" X1 s) Z! `# Q& R    Diags.RUNTIME_ON
5 O5 L% e" G6 M2 X3 k, N  [) R);
1 p  w5 c- i+ u& z: _5 R5 b  `/ v+ A' [1 \$ ~; j; u# O+ l
var Registry = xdc.useModule('xdc.runtime.Registry');7 ]& k; ~& o9 q: h* t) h  ^
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  `+ E. Z) o( f2 Z
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* t+ _# Q1 @- f
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 H8 a4 \, f5 \" L6 ?
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;) T0 m9 u" q/ l0 o% [' r( |
% V* q% ^/ i2 }7 A& B
/* create a logger instance */
- P* X4 }5 @" N$ Vvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; w- p7 J8 ~, @; i
var loggerBufP = new LoggerBuf.Params();* x; A, t0 i% I' _3 \8 E" U+ r/ J
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 g2 j" H9 H! d/ ]7 b: floggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 k7 M) C/ G% c" w* I& V$ H9 c0 W0 m( s" T7 Z2 P5 b# }4 a) h
var appLogger = LoggerBuf.create(loggerBufP);
* e# A8 O: M" v$ x' _appLogger.instance.name = "AppLog_Core1";  s" x: L' a3 g+ g0 G) U, Y
Defaults.common$.logger = appLogger;2 Q9 l$ w6 ]: E  ?0 t& V2 z
Memory.defaultHeapSize = 0x8192;   
+ n9 k" o$ e7 A, Z5 `- L7 B0 CIdle.idleFxns[0] = "&LEDStatus";/ t6 N8 D% w. `) p. f8 B6 B
Cache.initSize.l2Size = Cache.L2Size_32K;4 L; f. u% B; e( i: q

) H/ c1 b+ [3 f  Z# @+ g" `: U
回复 支持 反对

使用道具 举报

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 */' f: q4 f) T/ }) K* g- P* |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) o2 [# q+ S" c- d8 T5 O, ^var heapMemParams = new HeapMem.Params();
! I) r7 D0 q# i" w0 i# r0 WheapMemParams.size = 0x4000;
3 W; n7 h+ Q  i/ Y2 P% i3 A8 Q* |  [' j; ^4 W/ [, A
var Memory = xdc.useModule('xdc.runtime.Memory');- I2 H' l% R& t2 {! _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 R. o  m* }7 s0 ?. |$ E
4 X" e, M2 w: _' t我大约calloc  每次共计大小为5K*16bits,
* n  K' l7 p: @而默认配置才0x4000、需要改大。! K: P# d7 }7 D* k

1 p1 Q# C% d( x
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
/ z$ `. W* s2 o" F7 I' f$ qProgram.heap = 0;
/ S* d) \( L( @6 c' s$ cProgram.argSize = 100;  /* minimum size */
# ~0 l, m. v7 J% X" h5 I0 YProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-2 15:52 , Processed in 0.042186 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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