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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

7 T& o/ R4 v( i* e    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: E; ~6 \: `8 V9 R' m2 e3 l3 Q1 [, f& f$ F+ P
其他程序段。。。。。
: n$ @! z( o7 p# n, r( Y # V, r" j# {" x$ b+ G, f
   free(x_d);
1 ?: J& b2 v' ^$ B- p- j8 P
# ?" g' [8 N) e, p3 a使用DSP侧单独调试功能,验证动态申请没有问题,' {8 Y1 N! r- E+ i7 v0 N( a
1 y; Y: d0 P# |3 V4 n) L. @7 [0 P0 W
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 W# F& o, t' K/ k( ^  _

# l5 d4 O. r$ d$ ~0 c1 {# K: O, x9 s

) i4 H! N& [2 ^! v. W& V% P. y
6 r6 d8 g" ?0 y! \+ Z9 ^4 P- C' B! g4 \

: e- q% L. Y9 K, m, y* b
0 m: n8 t- n+ Q1 I1 Z
# f# i( x- F4 E9 L- \% Z; e" l
9 b4 d8 u* w( d9 E$ T4 [  N5 o( Y( |% Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明# I# U7 z9 J1 n5 P" D
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. Z, v) O0 {& Z6 N! Y5 V(不过疑惑的是,为何单独DSP仿真就没有问题呢?)* Q* F  @* ^& w% ^" F& _
5 C+ }) Y& u6 V0 |0 k  I9 p: c- k, r
是不是需要在DSP.CFG中进行配置
4 R3 F2 V, \/ }4 v; {我现在的配置为
5 V0 ?$ P# l& I, a- I* }
" |2 E- P$ k9 }; [9 R* }/*+ q- s0 V0 b# |7 |* h
*  ======== Operating System Configuration ========1 [, t- z- [; }' o
*/
" X- R# D1 }$ [$ ~
7 K. U4 N/ d5 S, R' c" L/* no rts heap */
$ n$ T! T& r6 [7 I3 sProgram.heap = 0;3 R* O- }- R8 {
Program.argSize = 100;  /* minimum size */
+ v6 c" O6 T: gProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% }' z' @# p& s
( `. e* P5 R" l. Q4 n/* create a default heap */6 Q$ Q4 R5 h: n9 Z0 F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 u# V5 [: G/ t3 E+ v( v7 A' V% Pvar heapMemParams = new HeapMem.Params();
' B1 p0 p: C- F2 Y) I6 NheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 n% J  m  G! \1 l6 A
$ p* O4 f. ]% W8 G+ Q/ S
var Memory = xdc.useModule('xdc.runtime.Memory');
9 W) I7 Z; y9 q$ O+ \# K% b' C" LMemory.defaultHeapInstance = HeapMem.create(heapMemParams);5 c% S2 ]; o4 T4 Y3 u! X4 r

2 g$ T/ F7 F% D* q) ~8 }  g3 ]/* configure System module */
5 g/ `* F3 p$ e; Wvar SysMin = xdc.useModule('xdc.runtime.SysMin');
/ s6 d2 i. k  K2 O( KSysMin.bufSize = 0x1000;
) F$ A' w$ g' d3 h# J% g! ~& }SysMin.flushAtExit = false;
4 p' I4 z4 G: S3 k7 m: K/ J) O; B0 ^* w' G' N
var System = xdc.useModule('xdc.runtime.System');
/ O3 r8 V3 ]7 R9 v; vSystem.SupportProxy = SysMin;& S* j# U8 O, c- z9 p% t
6 Z2 x+ ]# A0 j
/* configure SysBios to use the lower half of Timer 1 */0 m4 ~' M* M% |3 f
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');* h0 O6 l4 H; _6 Q4 H
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  e/ _$ w! S; MTimer.timerSettings[1].master = true;
% p2 e, M6 T! d4 K. I0 MTimer.defaultHalf = Timer.Half_LOWER;
% x5 X( o) h( Y# B* O* GClock.timerId = 1;
$ d: c+ x: z# k( w$ P& q: o% J, g  Z2 F. @( E: S7 F

4 l$ e# l- p5 l' s7 v( ^9 K/*. q' W# V1 C. i8 N& n" n
*  ======== Miscellaneous Configuration ========
6 t. }0 Y2 Z  ]" a */
# m! v3 `7 ?; D# D4 \0 Y3 d/ d& ^9 z$ n$ P/ o9 p
/* set default diags mask */& o  t$ j8 ~. p2 \8 c
var Diags = xdc.useModule('xdc.runtime.Diags');
  w' x$ L! I" W( p) w% f8 |var Defaults = xdc.useModule('xdc.runtime.Defaults');
- g/ A: N6 ^9 ?6 y) E
. K0 {- E+ c# B  ?( G* Q4 g! jDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. E# j8 z0 D3 o8 y7 O7 MDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;" B1 T! v. i5 f6 @+ N$ K* l
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 y& r8 r# H# C1 a" X2 g: m
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( J. q7 B4 O6 V! v2 \  [
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
) P' n2 o2 [/ j/ _9 f+ ]Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% V. l) F# Y' _: l2 ~7 A6 cDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
3 [" }; p' k: S  \Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 A+ s4 X; ]& V9 g: h3 r" }  j& @Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;5 k/ w& v) Z- H1 X1 T" f  F
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 A. U, D: l8 P+ a" k
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  K0 d/ t1 H! \& D( z. @0 fDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" S" E+ y% f4 i( c, qDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;" I0 b8 _! O' k" f$ H& L
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' h3 k9 N+ J  \9 g+ h% w# c) K- J4 j/ c0 N
/* override diags mask for selected modules */
+ z4 j! B- i$ L  b; R# L; |9 zxdc.useModule('xdc.runtime.Main');
% q/ }8 ~* J: ]7 y0 o: {Diags.setMaskMeta(
8 u; `+ l/ ]0 R2 `    "xdc.runtime.Main",3 J$ Z. i. L' o( ?
    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ J! q) U" X+ i4 w$ D0 m
    Diags.RUNTIME_ON
) U2 T  p& ]0 v  q);
  U% c+ @9 S3 o& _; w& K4 Q' O2 ?
  N1 Z4 c- ~% b; ^' n5 Cvar Registry = xdc.useModule('xdc.runtime.Registry');
+ Q" L9 Z" r# h! L+ o- N3 r4 {) @Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 F6 w! q4 V. @& L/ o' b% }Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
, [0 w0 \$ t, d' N, mRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 o5 `( p; R. @6 |3 Y8 }; VRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* T) M& u7 G4 \% V. M5 M; C) B- E; v1 j- \. R6 V) P6 h# W2 W
/* create a logger instance */! H0 U4 ?) a4 l# p6 q( \
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');, m, K5 e& V' D" |/ U" B
var loggerBufP = new LoggerBuf.Params();
6 j1 Z9 _* _7 W; AloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */; m) O# H7 M7 @& _& N+ i" _
loggerBufP.bufType = LoggerBuf.BufType_FIXED;; Q5 [1 l! }$ [$ B
2 N) z- \* T7 w" a- Y
var appLogger = LoggerBuf.create(loggerBufP);- X* n. U, U8 ]9 y. d0 |0 J2 E. U5 Y- t
appLogger.instance.name = "AppLog_Core1";
/ B: q$ f' g" m5 I1 lDefaults.common$.logger = appLogger;* S+ O* D. D0 Z" N5 ^- C
Memory.defaultHeapSize = 0x8192;    / _6 Y2 Z% v: Y; q4 e; C
Idle.idleFxns[0] = "&LEDStatus";  H: h* R* L: s6 P2 F: t
Cache.initSize.l2Size = Cache.L2Size_32K;  x: t2 P2 O" u8 q8 u

; g$ N  L+ P5 @8 t
回复 支持 反对

使用道具 举报

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 */$ M3 e0 V' v1 g! a1 B5 A2 b
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 o6 p3 G9 s) T( nvar heapMemParams = new HeapMem.Params();
5 r& O& R' r- x2 I8 c" cheapMemParams.size = 0x4000;
0 d$ {- k8 `8 _/ K! v
, \# f1 f4 w6 y; }* Xvar Memory = xdc.useModule('xdc.runtime.Memory');/ V. S4 _- k, q* a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& C7 Z! g7 f; _
: s( H+ c0 r% ~$ y我大约calloc  每次共计大小为5K*16bits,  V3 P6 e+ e) c/ r* K8 A
而默认配置才0x4000、需要改大。
: d+ `2 a* u8 B9 `; F0 i4 {  U; g: e5 v6 R! y3 e% V9 a" V
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# M/ c& q. ]/ ?2 W2 h% kProgram.heap = 0;3 }! \) F; T3 H% _5 [: U
Program.argSize = 100;  /* minimum size */
% H& r4 g& m: Q4 Y# }, _9 kProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-31 23:30 , Processed in 0.040872 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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