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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
4 L, @  p. R( l9 I. W# W1 d+ e8 D% @( {& N" {1 w5 e# [
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
4 u, p- a$ x7 T1 l
( @% D/ D- T: Y( Y其他程序段。。。。。: k1 I# Y( s; @. i3 O
7 M4 X. e2 R, I( u9 N) A
   free(x_d);
& h9 y. p  }6 U- ~# I
2 f/ U* g/ U1 u使用DSP侧单独调试功能,验证动态申请没有问题,$ M0 J; L" [4 l: A3 u  V) M2 F
% H" o2 Q$ ^1 p8 M6 X! d
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
! ^6 ^! B. G: @/ k
( x  G( W- T3 g' _0 ]; {# P: Q- S

: K6 R. x' a4 p4 m- m" L9 e
; W. r. V) q* K9 S' Z9 S! p. h5 ?* V; i4 A. _2 r, t7 y
2 b" ^5 C. ~; A5 K

. R1 t, e: ?2 ~  w7 }1 b: x' [! K  w1 x7 k8 b6 F! ~+ J0 }

' ]: A4 [' c7 a0 m7 F% L2 Z$ t
& B/ G8 v% d5 e8 S
2 t* w- X/ P. b) ~0 O0 W3 c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */& z. _: w& ], y: c9 I
Program.heap = 0;
: |4 Y, a! Y" t3 KProgram.argSize = 100;  /* minimum size */4 n7 p8 U& n7 \3 w3 U, U% t
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
7 a! G2 r* W/ s' b" Q7 Q, fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! }: K2 w, f" \" z3 K
var heapMemParams = new HeapMem.Params();
9 l% o# {8 F' t5 M( f# fheapMemParams.size = 0x4000;
$ v$ `/ x+ H& W* c
2 h* D- X' h4 _3 O' y. o) ivar Memory = xdc.useModule('xdc.runtime.Memory');9 m  z  [) I% J7 k' n, ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! R; _3 K& |" U
) x$ f: J% n# i我大约calloc  每次共计大小为5K*16bits,
3 Y* J2 [9 a5 N$ t: ?( r7 S而默认配置才0x4000、需要改大。8 n! Q6 G$ t9 d, X% Z
$ c- s- M0 p) v+ L2 ^; h( ^7 v
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
+ C8 [: u5 W" m1 ]2 z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下# W9 j5 M% T( U5 J
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# }. [( }; U7 k! I, g0 J6 {
! v/ e5 c6 L7 x0 i: X& C9 p9 V
是不是需要在DSP.CFG中进行配置, L4 p, B3 q8 _- a
我现在的配置为* r, s0 s" ?" t1 t

- P8 S7 m& T$ O% c0 D/*: |$ C* j$ M/ h9 \
*  ======== Operating System Configuration ========
) f2 u  h- @$ h7 q */
! j; t$ d! S) G; s8 P; N$ [9 D, o5 @) g
/* no rts heap */8 K' H+ T) J/ C/ R. s8 O
Program.heap = 0;5 Z4 j' E7 H% d* _* _8 t1 R* @
Program.argSize = 100;  /* minimum size */' G& t% F7 U* H
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 ^" {7 ]% z& F: \: z7 `% C
8 s4 R, C. F. o& X* m1 W4 k2 a
/* create a default heap */
6 A9 V7 Z& @5 ?  \: e9 l+ b- Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& }9 O( ^$ w$ @+ W+ I: X0 a3 v3 a
var heapMemParams = new HeapMem.Params();9 F, F1 j8 V2 t1 F: A( C
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
5 a2 y0 K( r0 b8 v! @* J
' Z6 h! G9 n9 W# ~3 _$ P9 E
var Memory = xdc.useModule('xdc.runtime.Memory');
* ]+ X" ]6 S9 d6 Z1 uMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
; }0 N& `3 \7 `; Y( ]& Z7 l9 F0 K, U: U- |$ `3 n% L8 U6 J
/* configure System module */, |! J2 @. G3 Z) i6 ]
var SysMin = xdc.useModule('xdc.runtime.SysMin');
& A; D: x# A1 V/ I) I; gSysMin.bufSize = 0x1000;5 m/ W2 y; B$ n9 T2 c! v
SysMin.flushAtExit = false;
- f( l$ n3 z: n. Q) ]$ j
4 P: J. r" a" f2 qvar System = xdc.useModule('xdc.runtime.System');1 r6 B8 g, U. `8 n
System.SupportProxy = SysMin;  D. a7 ?+ c0 J! i# O0 p

8 q' ?0 ]% p7 y- p/* configure SysBios to use the lower half of Timer 1 */7 S7 |  \1 i, k* g6 {
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 g) l; W5 b' d* ]# L
var Clock = xdc.useModule('ti.sysbios.knl.Clock');) t# u; b3 q5 c1 N
Timer.timerSettings[1].master = true;
8 I& T# t4 Y, q3 T2 ^! T- HTimer.defaultHalf = Timer.Half_LOWER;
+ t" E9 @8 c2 ]# e5 S7 \- uClock.timerId = 1;
/ P/ `) n5 c" p6 Y1 \' n; N( `5 g* `, g
# A0 q6 `( L3 c4 @' B# W  c' v; N
/*5 ~  u7 `7 P- U! d% U6 v) h
*  ======== Miscellaneous Configuration ========
- |1 @  b" b. A+ m: a */+ ^9 [6 ]- s4 O5 X
, v2 j" {2 s0 r* y" S( y: _3 T
/* set default diags mask */
- f* W6 P( T# [* l$ G, S) r% b  kvar Diags = xdc.useModule('xdc.runtime.Diags');
9 b# M4 H6 _; O! E3 b5 ^' svar Defaults = xdc.useModule('xdc.runtime.Defaults');
! Z+ k# ~6 v% i" u# p. E  M. j; d" `& u9 X" v+ ~
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- F, D( X+ i* @
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& {& M! ~+ ^( C, x8 \
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 X1 I- |9 c% W+ [5 H8 r! O( G
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 t7 z: M$ Q' C" _
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ Z9 w& f6 i9 C( J2 S5 G. W7 v
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& I. q/ W* A+ q7 n9 x! bDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;; \9 v& K1 w# r) a$ g
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. x' {1 w- [! \7 _- [
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( D" z1 e8 t) l4 [  H- A) ^
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;/ w( z3 X' z' _1 a& p
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 G# I4 q9 e" q5 |! g9 X) l) tDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ y4 \1 O9 H, ]7 ~' v. C
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% \$ c4 |- X4 G6 b9 o5 }, P, b3 pDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
# J" u9 {& ?$ U, h& f4 ^8 @
+ X0 @) x1 o$ C8 a" c  ~$ O/* override diags mask for selected modules */4 a1 E+ F5 a, S+ h7 _* q' W
xdc.useModule('xdc.runtime.Main');# @- O2 x: o7 Z2 _) p) u
Diags.setMaskMeta(
7 N2 G0 m  p( ~4 v    "xdc.runtime.Main",
" y* H9 }2 \/ i+ h( t6 _7 L! b    Diags.ENTRY | Diags.EXIT | Diags.INFO,
/ B7 h, U8 w# }0 ^    Diags.RUNTIME_ON- [; n" c' O; `1 g, w' @
);
; P. }+ S( B$ G+ u: f% L  \5 |: j" _* f8 d' x
var Registry = xdc.useModule('xdc.runtime.Registry');* y# j& ^+ o  U, v  R. f7 \8 \
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* [% ~5 D5 c" {
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  A) g# ?' G$ [1 e, y. J4 w. y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;+ J) O4 E+ P3 x( L
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
6 d5 ]+ @: f& W* A) _
; S, x+ s8 G' g0 [3 B2 P9 t# k1 X/* create a logger instance */
# Q% V$ T+ _0 q- tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ r$ U* k1 M4 T7 E4 T
var loggerBufP = new LoggerBuf.Params();" I# z2 O- t9 y) J# j
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
% o7 U8 T8 F& k* u3 K4 Q% z) ologgerBufP.bufType = LoggerBuf.BufType_FIXED;
& }* M& m' t+ O% \
& P: J1 p- b* g# u, J+ S) e( x# Cvar appLogger = LoggerBuf.create(loggerBufP);9 c% U3 W+ ?  P
appLogger.instance.name = "AppLog_Core1";# M; I7 g* M. y: k; c
Defaults.common$.logger = appLogger;
% r$ h- D" o6 Q" ~1 r" D9 |Memory.defaultHeapSize = 0x8192;    * [* C& H* [9 @" c: t0 E+ ~0 x
Idle.idleFxns[0] = "&LEDStatus";1 C8 O# E7 k8 v/ L$ G/ X
Cache.initSize.l2Size = Cache.L2Size_32K;
. A; U% D, T1 L% u8 q) i) i- f' T1 a! f  z2 w
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-26 07:28 , Processed in 0.041052 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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