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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构6 a) Z8 A* s6 f  L/ E
$ Q& z5 W& j' l. Z; g) P) `! G
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" q6 k6 I, j5 E) j' B0 p& q
) }0 R: \) m' L/ {+ U2 ~其他程序段。。。。。
; n3 J! }& B0 r- N ' E+ i* T! m9 U3 ?  j
   free(x_d);
- ?1 R$ W2 {( J6 t7 y2 G1 \  h2 O  f: b& _, w; B. O3 l
使用DSP侧单独调试功能,验证动态申请没有问题,
* e4 ]3 r) |8 P( r8 \" R. G% e' _5 @- Q& {1 f
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 o: I: y0 i$ U* P" u0 F

) K  y5 C5 F" A2 V4 d' {' A: T9 p; S
6 m7 w8 `9 \5 i7 X' q1 Q/ [% @! z

; P! ~) U1 F6 d
2 R6 x2 i: E: `. E6 d# Z) ?, N  D/ J- t9 K  u

) r% v8 w% G0 u) x) N2 X
% T# t. ^  b0 L( X5 P
7 w2 N% r* p+ \% A+ R
2 l! R; N' p9 c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
. q! c5 k9 S# D8 y3 ^6 }! [我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) j; j- ]0 c* M% U( Y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
) n( Q6 U1 r  h* f; F9 P6 x) h: f/ E
$ \1 j% b# [% C& C6 x
是不是需要在DSP.CFG中进行配置- z5 s1 g" \/ A* d2 D  j
我现在的配置为
4 z* p- O+ M( m- s* ?/ Z) o9 B
9 X# J! W: z1 w$ h0 D8 H/*' x5 z( K* Y" w' W. g' F4 m
*  ======== Operating System Configuration ========
' j- n# H7 `0 Y" s0 @5 B5 C */
( L1 J* B! n. |+ r3 m3 [5 v3 _# \2 L# b/ h
/* no rts heap */
) I& t1 L6 k0 P2 h. }Program.heap = 0;" ?, G* X/ J- k6 m& X& m9 l
Program.argSize = 100;  /* minimum size */% U3 K0 r( `3 d, N! I! \2 R6 J
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) ~2 [( k1 G  T  z# O

+ N6 [9 z8 x6 b; l/ g/* create a default heap */
! [% }( E" ]0 [/ w+ ]8 H! Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* g# O' T+ q0 w1 H9 V+ [# Gvar heapMemParams = new HeapMem.Params();& }* C* B) `+ |$ x
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# Y5 ^! @4 f5 x/ m' x& k2 A
( |8 E0 L0 f- U  c) t
var Memory = xdc.useModule('xdc.runtime.Memory');
- ]8 C( K1 s) x! E2 b" r3 I( RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 R7 o) c. q. J3 L! \& A: f, Z: w
! g! Q! i  s5 G6 [0 n& {/* configure System module */
% k1 R5 C1 B. \var SysMin = xdc.useModule('xdc.runtime.SysMin');
- w! |+ G) }4 g4 {2 lSysMin.bufSize = 0x1000;' q# j) d' P* [
SysMin.flushAtExit = false;
3 Y6 v( [/ {0 T8 S' g" n) G
% l6 X8 ~$ z' {) L+ \. yvar System = xdc.useModule('xdc.runtime.System');2 m& z; O, b/ k2 r% P
System.SupportProxy = SysMin;9 \) H0 p: G* s1 q! D
* S! ~3 _% H# D7 T  U' S
/* configure SysBios to use the lower half of Timer 1 */
1 ?* ?* o7 p2 t, pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. T# c) X. l8 z* f+ k" l( D% Fvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
: K; U7 q1 g, D) N3 BTimer.timerSettings[1].master = true;
0 H, i# k, f7 \# L( ATimer.defaultHalf = Timer.Half_LOWER;
$ o; J3 B' ~6 ^9 ~0 V3 e. ]Clock.timerId = 1;. Y- Q' j! j- S7 y% w
7 F; F, S' v% e3 U$ A6 Y
4 {& N. n/ [9 V0 `1 V" W
/*" g9 a1 u0 s# Q: q6 _; Q7 N) a
*  ======== Miscellaneous Configuration ========3 ^4 E0 {  j  C0 u
*/
2 s9 N9 g" T/ I9 ]. F. e# G3 e( u! g% E2 u; N
/* set default diags mask */! f" U* D5 [4 s5 o
var Diags = xdc.useModule('xdc.runtime.Diags');* H$ p' o3 C: M" g
var Defaults = xdc.useModule('xdc.runtime.Defaults');
9 n+ ~+ l* p* O, j
" l  h0 o$ x3 p1 a; ZDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
5 o! B5 c- [$ {Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 J5 f  n. G; W; F" l, e* _Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 d/ r% |; y2 P1 S4 O& TDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( F) L0 V. E% K5 bDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   *// Q1 |' @" d4 W; C9 U" B$ Y8 x
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ \; P- Z  e6 J, l* tDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! `1 F, q& ]; ^$ \1 ?
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 C9 [+ q! R' S
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
+ E) ]4 C. T5 Z: O0 G* GDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
6 L0 t% y, b* O. ]  r) fDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 C7 C! X  q- S. D5 ?Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  ]! F" ~- I  @+ N$ w( I8 `# z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( D6 T! p' g; _Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' e! V+ {8 A' @3 {6 M' d

. u- k. U# i. |/* override diags mask for selected modules */
  y$ ~  _1 d3 Rxdc.useModule('xdc.runtime.Main');
5 E3 \+ A; S; m. x4 mDiags.setMaskMeta(
7 n' y- a7 v. J" r6 K    "xdc.runtime.Main",
( F  y. i8 q4 Y  I% K2 n. m. q    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 c8 }; [1 c5 ~6 a# ^) R" R' Z( \
    Diags.RUNTIME_ON, W! i0 l$ c+ S' b  a
);" K7 B( u- E1 S

0 Z1 e- N- \7 ]var Registry = xdc.useModule('xdc.runtime.Registry');
5 `+ v7 A5 z) j( n6 RRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ V1 _' r* k, |Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" p: n0 Z- m  n- u1 [
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;- z' F9 Z, x7 h5 e( E. ?
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;) c# @* i% e: X1 m0 x1 K
) e1 a- Y3 P# L/ N$ h  f
/* create a logger instance */3 M3 J8 [( ]/ H) V/ T' ?
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');! f* f9 }& X8 L: W+ \
var loggerBufP = new LoggerBuf.Params();
0 d2 s6 q. R' \: J. Q, P1 TloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 W) J, @8 E8 {( f+ |
loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 _5 e! H% n* K; Z* s( S# i2 u8 U2 ?
/ _/ K5 l5 f. N
var appLogger = LoggerBuf.create(loggerBufP);
% _4 e, w# {: Z* j0 {! }appLogger.instance.name = "AppLog_Core1";
. A) S, n4 |$ h: i9 |Defaults.common$.logger = appLogger;
" H* @0 z6 z5 M6 f. [Memory.defaultHeapSize = 0x8192;    6 L) n/ d; A9 r
Idle.idleFxns[0] = "&LEDStatus";1 {3 ~4 r9 w4 C6 C1 j7 b! j' F
Cache.initSize.l2Size = Cache.L2Size_32K;
' W. Q( O' n/ u; K
8 K4 F* q% l7 Q+ G
回复 支持 反对

使用道具 举报

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 */) Q8 X7 {: ]! n+ f: [+ E( [) k3 L$ b6 e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) Y$ O9 [- u/ \2 ^$ T
var heapMemParams = new HeapMem.Params();
0 P# l: E4 ~3 `% o& M0 i7 f- vheapMemParams.size = 0x4000;
  u. Y6 i6 `5 z; h9 P* G) [* F
var Memory = xdc.useModule('xdc.runtime.Memory');
6 W+ l2 v: d: R" L1 D1 ?8 Z/ rMemory.defaultHeapInstance = HeapMem.create(heapMemParams);+ F$ i) x# C5 ^

. T3 O9 ~0 D# f" U  L9 p% r我大约calloc  每次共计大小为5K*16bits,
& J/ q) Q) D  Y: D3 z3 ^  J. K, w而默认配置才0x4000、需要改大。1 }& R; |  T. L) s
9 s& o4 ~! n. l0 e# c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( m' E$ ^  p$ W% b& R/ t$ eProgram.heap = 0;% U0 L" w5 j' j/ o# u2 ~  _
Program.argSize = 100;  /* minimum size */; x: v4 [; V$ ]( y
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 06:51 , Processed in 0.046749 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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