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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构6 c( @$ T5 C% ?3 _
+ c8 C" N% u: L# u
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
6 Q; z" Z$ j2 N" {0 l
) s& T1 M7 ]' |5 R4 y# W% {  A其他程序段。。。。。& S& B- o. i$ O2 @; N: l$ U; q

5 N- y9 L0 z- Z   free(x_d);0 Q$ s) E8 q* x7 Y2 c  O

. {! p+ Q5 D2 X0 d; }9 u( k" M3 D使用DSP侧单独调试功能,验证动态申请没有问题,
( Q1 d  Z# b  r2 Q7 v$ n' ]; e& w4 E9 y! C8 c) A/ n+ ]4 A% ~4 \
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。. I' m- p( S6 o9 u3 I

$ Z. J, t( O! u. ]- l* D& g; t
! y- A. ]  _- b- H
- v- K$ Q8 B; z2 p% z1 i, c/ k& ^$ Z2 [3 ^2 n- N

7 ^* A4 @* v) f% L
  L; m- ~! z" x/ D$ L4 n1 Q9 w* I; j

9 u7 ?! J! ]1 G" O# J4 W1 P( y* @, \: A) |: e" x

4 M. @7 v0 q. C6 n
分享到:  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 */# g* O' X, W* Y2 @0 N
Program.heap = 0;
6 G& C! c& i  c. \& C) KProgram.argSize = 100;  /* minimum size *// `, A6 d9 {1 ?: A
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */' I) h1 G4 n, u% w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  w7 Z% U4 x2 V( U) f5 F- Rvar heapMemParams = new HeapMem.Params();
; i6 z) R  O) K, {$ i& l1 GheapMemParams.size = 0x4000;1 w) E; b5 |; M7 A

7 e# D0 F3 F. M# |. hvar Memory = xdc.useModule('xdc.runtime.Memory');
. N6 T5 k' e: K( z2 gMemory.defaultHeapInstance = HeapMem.create(heapMemParams);+ Q1 [0 S! `3 B' E8 Z- S% S
+ M" [! R" `7 q' J& _9 B' Z
我大约calloc  每次共计大小为5K*16bits,
( W; l0 `4 F* K8 l而默认配置才0x4000、需要改大。
; j$ y+ k- w% M6 K4 D' D9 J
: h; `  |- X! U( ]1 U
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
0 S6 n4 A+ m3 P$ y" W我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下% c/ i  r& e: g! I7 ~9 V
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 o! V. J9 P  \
0 y4 Q1 x0 L+ {, j( W4 m' K+ {
是不是需要在DSP.CFG中进行配置
! X6 \3 S( w5 o4 n7 P, s* ~我现在的配置为
  r( y$ s* k6 e& @( I  j
% E5 y* f" n' Q& k/*
, A$ R/ ?! [1 e; R# T" ^# i9 t *  ======== Operating System Configuration ========
/ L8 J& N  v9 b% H */
/ n: w2 t- s5 O, L# Z+ y& o5 L$ u- a( E" c; g. J8 G: [* A8 q
/* no rts heap */) I# F0 M% ?; q1 g; P
Program.heap = 0;: ~, x6 a/ o8 S; D' r, x
Program.argSize = 100;  /* minimum size */6 E# O# s0 B, W, _
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- J5 c$ n5 X+ C  X/ L/ \" Z4 ?2 ^$ P  i7 l1 t6 L2 h
/* create a default heap */+ O* b2 i9 \! ^' d& l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  t% ^7 q- Z3 w2 @* Svar heapMemParams = new HeapMem.Params();* U4 m9 d' Q& ]9 e* g
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
5 c" N5 _+ o3 h. g5 w, R
& i" Z7 s& j% k- l4 U, [! \% ?) e2 o. y
var Memory = xdc.useModule('xdc.runtime.Memory');
' ?/ K+ ]8 t% L. l) |8 ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);9 B9 r8 w9 U' [6 p, D
4 J# Y+ ?& r9 ^' i. w6 ^, U
/* configure System module */: I- g( P3 I- x, x( k2 p% _% u0 v
var SysMin = xdc.useModule('xdc.runtime.SysMin');
7 ~; n/ Q2 j' N1 iSysMin.bufSize = 0x1000;
3 D/ I2 m% Q# FSysMin.flushAtExit = false;
( m2 B0 o4 O( ]7 f6 q6 F0 }0 L
$ D) w# c5 z* O& r; i, V. q& Hvar System = xdc.useModule('xdc.runtime.System');
9 S1 N5 ~* Q# u3 ZSystem.SupportProxy = SysMin;
0 e  I% x. v( Z3 ?  Q0 N/ F
3 {% b; s9 V; [6 z4 i$ e/* configure SysBios to use the lower half of Timer 1 */
$ v3 w% ]/ O6 p1 _1 Bvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ L# o) Y9 q" I8 P! g# Zvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
9 K+ J$ G+ @: a9 e! t5 @4 CTimer.timerSettings[1].master = true;
% s9 X" }/ n* p3 O# l' UTimer.defaultHalf = Timer.Half_LOWER;" s: `3 [2 D7 g9 s& a6 r. ^
Clock.timerId = 1;* E& \5 t0 y- v+ b
' ]" m3 L/ W7 S' H0 k+ C' h+ M2 @
' b- T& ]; k: a
/*- A; e5 W  d8 \$ a3 d! m9 m
*  ======== Miscellaneous Configuration ========
/ @$ S- z/ R" u% N- b */
, Y( a: x0 A3 `% f# y+ x
# {$ g! N6 U$ Q- \- [6 k/* set default diags mask */
: w/ H0 i6 b( a! q: H4 y$ l% mvar Diags = xdc.useModule('xdc.runtime.Diags');
+ ^: U- b7 N( V5 \9 o5 hvar Defaults = xdc.useModule('xdc.runtime.Defaults');
+ F$ J8 L0 j4 F& k  b8 J
- }, l) k3 F& O, }. t  tDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 v3 s; X5 k8 q$ @, r
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;* g% O" A2 u5 P. y# R
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;' H- B, e+ G1 r7 f8 ?7 u
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: m0 O0 R& c; N& s& H" F
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */* ~* m9 Q$ l8 v8 i5 E
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;& e, s9 s% d3 w5 d) r9 g/ Y/ _9 U
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, {) z2 o; `. W" w8 d4 f" c
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
( G  ]$ Q5 y5 r) _( C6 }1 \Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;% s# _6 @8 G! ]7 b
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 D, t7 l7 J. r$ @& L& y% h& FDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! g: F) t" C3 d; |* wDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) [3 _  O% Q. Q0 C$ L
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: ?9 I5 j0 p- f( [  N' s# q% j  u
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 Q0 ^$ l( k5 k( L" v; s  ?5 E" N1 n

. f' q1 k0 l) j) r" z/* override diags mask for selected modules */
, A; ?. c3 J- ^% c3 D  {$ W5 Kxdc.useModule('xdc.runtime.Main');
7 F! o" B( N: e8 w+ c5 B1 W- kDiags.setMaskMeta(  O/ U# h' ~( g# N# n$ v
    "xdc.runtime.Main",, q  ^: }" d0 M( ~  h" {
    Diags.ENTRY | Diags.EXIT | Diags.INFO,& n" j9 G. a/ X
    Diags.RUNTIME_ON
5 R3 B. z3 X3 u8 i3 Z);
+ Y( v; `2 M7 }3 H0 F- ^7 s) j' J8 s7 T: n0 K, X* \
var Registry = xdc.useModule('xdc.runtime.Registry');4 X5 E& z6 l3 E0 M! k+ p
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 `3 w6 Q3 Z7 Z0 O2 G& {# T# kRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 T1 b8 D. b. Q; U3 YRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;: k9 L& N7 k. w1 D$ T
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* A. H9 ^7 {3 o) u6 O! i9 d  W
/* create a logger instance */5 @' Q6 f( ]) M* l+ c* @
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');4 T* W6 r* d7 g* |" t
var loggerBufP = new LoggerBuf.Params();! V& Z" s/ Q: P* [4 d
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */( F! ?0 ~. f( V
loggerBufP.bufType = LoggerBuf.BufType_FIXED;, r2 k8 P* O0 U& v4 d7 {
) ^% ~) D' h3 o4 |0 l* }: N; d
var appLogger = LoggerBuf.create(loggerBufP);. u+ y& @! w9 I
appLogger.instance.name = "AppLog_Core1";
, _% Q' l4 i, z2 tDefaults.common$.logger = appLogger;' J) k7 @4 A5 q; u+ d, |; g
Memory.defaultHeapSize = 0x8192;    1 f2 a3 I0 s. h7 o7 Q& y
Idle.idleFxns[0] = "&LEDStatus";* ?. a! f3 p+ W) E; }; m
Cache.initSize.l2Size = Cache.L2Size_32K;. A& u) L6 p/ y) X' b; Q% G! h, I% F

. O2 L" `$ W& _0 t, P
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-17 20:18 , Processed in 0.042673 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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