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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ \' W+ j+ A; G/ d4 [" g
+ G% z# K# S+ X& v( Q+ e    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 M8 u# B. Z" F& M6 l  t' A

7 X4 [+ N9 C6 @! k5 P其他程序段。。。。。
# G2 _  S4 s1 |5 b
8 s5 u+ E! E- w5 {/ l+ g* H   free(x_d);
8 h# R$ ]' C0 a! d; m/ o  ^( e( _) C0 o# \6 Q
使用DSP侧单独调试功能,验证动态申请没有问题,, d: A3 X0 i' u& U% Q6 \

, Q5 o% z" x0 d' h, Z% _! I但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。$ N1 {8 u9 q  P% J: y

% N$ G! s( p  _2 o- C, {
; i. N2 o& u- g$ D, W+ Q1 Y* T/ k5 X% i3 a8 t

0 V; e! ~+ H4 Z6 ]" H
  L$ ^9 n2 I7 Y& j. C( W( e3 \
7 n0 Y% R5 O$ |
" H. M6 U2 R) [* N# E' O& ?5 Q  D) e
" \* [6 x8 `, B( J" }5 E& R/ u/ z$ {* e
. V3 q2 ~/ I2 ^4 I: w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明1 K/ M5 J: Q! F0 j& Z- I; ]
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; M, d; v- b$ W/ K(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 T3 x6 n& U' I1 ^+ R2 z

1 y3 _9 `7 D/ i4 z8 W+ k7 ?是不是需要在DSP.CFG中进行配置
( S% n, U- U" ?& T0 {  ]我现在的配置为+ I, p0 H5 F( W7 D

& B1 ?& _6 c( v. k7 z' g, p9 c/*! Z# f) v4 L% V/ N, O4 q
*  ======== Operating System Configuration ========+ _1 O. I5 J6 B2 P
*/
5 V. o8 ^/ j4 B; r( g' z- }; W) R7 O4 [- n5 }0 ~# q
/* no rts heap */
& T" l5 y) t: h2 Z1 v  G; KProgram.heap = 0;" h& a+ r# ~) U' I0 v9 a
Program.argSize = 100;  /* minimum size */) U6 g$ `4 P3 y$ i1 O
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大. h0 f1 c+ B0 R
1 g, J3 X' O5 d/ C. }: N3 P: a
/* create a default heap */
$ l. O7 S4 M9 J  h9 o( ~, Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, l, a. \9 X' W2 |) bvar heapMemParams = new HeapMem.Params();
5 }; Z1 f( m! w, Q' E( H7 SheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: ?6 \- O8 z1 q, {6 |  d$ b$ C2 o* C9 [5 b2 s5 b* `+ }3 |7 m
var Memory = xdc.useModule('xdc.runtime.Memory');
( L* ^7 B( a. n4 ?# B) n: t2 CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
" i' e# H; _: @% M% ]2 L; G2 x. }" Q! y5 s2 n6 T
/* configure System module */
6 m3 s: T4 q$ d7 ~var SysMin = xdc.useModule('xdc.runtime.SysMin');1 F" @" h3 S( G# M" h0 M
SysMin.bufSize = 0x1000;
; J7 l9 k3 P: N* U7 }SysMin.flushAtExit = false;
- p  T# A% g0 P3 c! {$ p% G% B; a3 X
var System = xdc.useModule('xdc.runtime.System');) i' ]9 q+ x& c# I* `) p
System.SupportProxy = SysMin;* M/ V9 r; ~  ~, C+ h

, v3 T% i' ^# M3 I3 d( g/* configure SysBios to use the lower half of Timer 1 */
7 w9 [2 x3 Q0 B. H  a5 k' t5 dvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ J$ p8 x3 A( K+ Evar Clock = xdc.useModule('ti.sysbios.knl.Clock');* o/ U  r! v4 w4 m
Timer.timerSettings[1].master = true;& s  @0 Y6 M$ ^/ w/ m) l5 D1 G3 H
Timer.defaultHalf = Timer.Half_LOWER;
; T# i' `7 i) K5 P4 ~Clock.timerId = 1;
# v2 I% s& r: G6 T% K0 G2 u! }! ?$ c
* U& `, u$ d, ~1 Y: J1 X# i
/*
( o& _& R, Q- ]- L. n: {+ l *  ======== Miscellaneous Configuration ========
; c6 q3 @3 m! M' o9 a: g: X */& Z, I0 _- j4 R( ~$ V
( I1 t$ i0 X6 P4 \* p
/* set default diags mask */
4 E) L5 a  e0 u+ y9 [9 e1 Svar Diags = xdc.useModule('xdc.runtime.Diags');8 X2 a. z5 Z4 N) @5 i. A& r& S
var Defaults = xdc.useModule('xdc.runtime.Defaults');7 M3 S* r  u! g7 B

$ y, b( N" b& _# cDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! R( u3 `: V2 o5 g2 L% A# k% X
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ H% D/ n3 ?7 T3 O1 e3 J' BDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* R/ _: d# E: ~) |, y. {! \
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; i6 K! q# K, O1 |# KDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
. J8 w: h, U1 w# H6 sDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. i1 S/ z! P0 S: J, N. n" x6 Y' dDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ o& ]- q$ d% ?
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;! N2 ]0 q  Q4 Z* U9 H
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) l+ T2 v, ~, A1 y# lDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;. _2 C0 ~& e4 R+ ]2 J
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& u" w7 g5 i$ x. f0 l6 x# A
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;: Y: A: y& Q1 W2 g# g% H
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% y2 z8 w1 @1 r$ F
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% |0 t" X& c2 K: ]/ H$ f
* r( K, D7 W8 T7 F% g8 _5 o
/* override diags mask for selected modules */
9 J( U; g4 Q% N' T1 ~xdc.useModule('xdc.runtime.Main');: g# I( k7 v& f# h- o
Diags.setMaskMeta(. U% ?) }% M' M8 T. q
    "xdc.runtime.Main",/ Y4 N) x) e6 A" j8 s; `
    Diags.ENTRY | Diags.EXIT | Diags.INFO,! i1 h$ O. s0 w4 r
    Diags.RUNTIME_ON- o/ A& S1 x1 n
);
0 ]0 V3 y- r8 ~2 z6 S) e6 ]
' c8 L& U! |1 i$ \: h- x" k$ mvar Registry = xdc.useModule('xdc.runtime.Registry');: S2 r7 f$ ]6 H: Z
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 H) g; B" q! M" P/ QRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;- Y1 j9 P( Q: P% a* R/ c! I! i
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;6 U  T$ R2 v, e6 u% m1 v7 ]
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ x9 Y/ x8 B; G9 J! z7 p0 l/ D& B3 A; P4 W5 T% p0 V* m
/* create a logger instance *// f; W6 O8 b7 a7 G1 A  }% x1 ^2 h
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');5 @- L+ ?! A! h/ c9 H
var loggerBufP = new LoggerBuf.Params();
/ c. ]# H$ Y+ Z# z5 GloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 e9 w0 A: u$ u) i
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
) K" L" y2 ^! V8 c- e8 {" {$ V# {4 T5 o5 s0 f# C
var appLogger = LoggerBuf.create(loggerBufP);
0 ~6 ^$ \1 w& vappLogger.instance.name = "AppLog_Core1";
7 ^5 x. M1 E( j0 N' H" m4 d' ADefaults.common$.logger = appLogger;3 D9 Y2 E4 b9 ?( w( `$ k$ {
Memory.defaultHeapSize = 0x8192;   
# b4 ?" g2 k5 yIdle.idleFxns[0] = "&LEDStatus";6 F9 X$ W* o: f/ d# A0 J
Cache.initSize.l2Size = Cache.L2Size_32K;1 k6 K" r; E4 C* v. k

, a) x4 a7 B. |, p
回复 支持 反对

使用道具 举报

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 */. ?0 L+ b- D  y3 f1 X8 A, k7 `  T
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( L' _- V" ]7 e8 }9 }var heapMemParams = new HeapMem.Params();- S2 u+ [8 c$ j- S2 Y! N
heapMemParams.size = 0x4000;
. f! T: D' @& m  C1 N% Y3 u$ K  C" s5 X
var Memory = xdc.useModule('xdc.runtime.Memory');1 X+ U/ Z3 V( {3 B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 U  P) S- T! l: X: w1 x# y
/ v# \/ c8 c) j8 |3 r我大约calloc  每次共计大小为5K*16bits,. s' ?- Z! j- d. {2 w( b# M& A* o9 S  R
而默认配置才0x4000、需要改大。
% k# W6 [9 |! ~& l1 ~3 h4 s1 M. D2 v' U! R( j! F$ ]; `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */& S& `8 i/ A9 Y. r1 n( v
Program.heap = 0;5 [/ E0 m, ?4 ~1 ?3 t! b5 Y
Program.argSize = 100;  /* minimum size */
7 c, f0 a6 j8 IProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-9 11:57 , Processed in 0.042507 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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