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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构* I! G4 ?# d( d4 M( F/ J3 B9 S

- t/ b8 Q( j/ K/ }: v    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2560 o" w# f1 p( I& |5 u  v0 b3 J
" d9 S3 G# J1 e9 l9 Z2 ^( Q& ~
其他程序段。。。。。3 r. B- {" f* v7 l& Z3 h

$ V( M/ d: K8 c$ r4 ?% _   free(x_d);) V' Q0 y8 B9 l7 c# Q7 g
' `. Q3 H$ N2 u; [, ^2 ~  }- G
使用DSP侧单独调试功能,验证动态申请没有问题,7 D- u! m. F0 I+ f) Y( B

( D; }! Q- c" j6 K- h$ E但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 p  w% B; P; l; z) i
- T8 Q3 n& H9 t$ l8 k
) m* _3 N$ ~3 O$ P6 W; Q
( t6 U$ N: ~( R. w
( O0 h8 r/ @4 i( g2 {7 P% `0 B
3 f% a2 ?" U+ k/ z7 T

  G/ Y7 g& I/ s0 T& t# m2 g" S- F) l8 i
  V; D2 V' L9 a; C3 {

: l( D7 H! i( }. g7 M, p0 i: k$ x3 y1 u/ M; e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& X/ s/ F/ B) s4 f6 z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
, C) X* |2 D: m, h5 D- ~(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ R, \* Z2 }  u( P$ F# w% K8 \( _

  M) V1 s$ |6 t0 _2 }* @是不是需要在DSP.CFG中进行配置  _6 ]4 I: ^! B- B$ i
我现在的配置为
  u7 @* C5 O! o: s! s; `& u$ w6 a$ A" ]% U/ Q' q! \
/*
: \! j8 g! L2 _( Q2 p4 n7 U' A *  ======== Operating System Configuration ========; C3 Z2 Z* S$ O; _, r$ a
*/4 {0 i" n' f7 u5 w0 v9 @0 n4 T
. v6 z$ _) m! h
/* no rts heap */
, t$ r0 V& J- x. c' ^0 ?) G; R7 JProgram.heap = 0;
+ M; h: X9 a4 {  ]0 T5 i5 NProgram.argSize = 100;  /* minimum size */
: g. y0 N7 y  @8 fProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ h+ M6 _2 i2 h6 \  K
8 C3 s+ X4 K5 n; k5 E" `" U/* create a default heap */7 s# L  l9 F6 v4 j8 Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 A& ?8 k% e/ h( ?* D! o0 Svar heapMemParams = new HeapMem.Params();5 c3 G5 L* N* K( d
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ W7 V+ U' f" k$ e0 o7 B+ H8 Y  B$ B: t: f2 \
var Memory = xdc.useModule('xdc.runtime.Memory');
  a! Z) F( A4 R2 F6 d' B8 q0 MMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, j: ]" l, ?- r
. u4 r1 M; U- L; q/* configure System module */
+ t  @8 c3 H$ _var SysMin = xdc.useModule('xdc.runtime.SysMin');1 W6 y0 x. O) d
SysMin.bufSize = 0x1000;
4 e3 ^' V; x# J. N. [: A# E2 rSysMin.flushAtExit = false;
+ x* z, U9 S* g+ ?  X( G' k+ u8 I7 F9 o! |* B
var System = xdc.useModule('xdc.runtime.System');
. U/ m2 [9 h, w9 I# n, iSystem.SupportProxy = SysMin;0 F! _, h4 o# z* l) u
' m2 U5 _; o/ r" [
/* configure SysBios to use the lower half of Timer 1 */0 @% e/ I5 `% [2 m6 z  b2 L$ Y
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 {5 C# j6 O- Y( b
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
5 V- ~* O8 i! v  V' C5 B* KTimer.timerSettings[1].master = true;
% U6 P4 e5 s2 D; P" |& \Timer.defaultHalf = Timer.Half_LOWER;9 R/ {' x2 O0 M$ @/ e1 h
Clock.timerId = 1;
  f( p* l7 l. T2 p( b$ @1 N
5 i* R5 P  W4 Y* h! S8 Z
$ X, N) v- ?! u' }: p/*2 \' o' V8 k2 u! k
*  ======== Miscellaneous Configuration ========
0 ^  c2 ?- B' v( Y! d& Z */$ g0 v9 Q& V- l: f+ ]7 a

- t9 ~) D* m& J5 G' }& a/* set default diags mask */
4 @/ Q( q0 j! e5 L$ A2 n2 |- A  ~  Fvar Diags = xdc.useModule('xdc.runtime.Diags');
: }. b0 ~% j6 ]2 J1 [. l2 dvar Defaults = xdc.useModule('xdc.runtime.Defaults');
9 Z; p$ B( H5 P) e
1 a$ V- F" |0 GDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;' a* ^8 c# \& {# S8 H0 N* g
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ L6 s3 s6 r+ n% y1 b- yDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
1 q2 d# C- R, f% _Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) R0 i0 X% p0 F4 |& e, Y% qDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 `! u% |. o2 p$ q3 C# T7 uDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ z! A, S7 u1 M% E! A
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' w" x4 Q: S1 S0 W% SDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;" G, W) _. J  x; W# L
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;% O0 i4 M! @/ R
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 r2 S3 D0 I7 N* T& j6 j
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! L& _; ]& l; DDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
8 E1 ]. L7 W+ G5 l& CDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 }6 u# j6 x) b: w1 I& H* s
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, c3 D, v& Z2 Q: b; v5 d' k& g# ?

+ G. z/ H& e1 k9 w/ e: D. G/* override diags mask for selected modules */  f* J6 g2 ^* T* f; y; }
xdc.useModule('xdc.runtime.Main');
- Y$ `' m* v- E8 \Diags.setMaskMeta(
" b( u- a, n. f' I    "xdc.runtime.Main",
' v8 d; g$ `5 ~4 ?: _1 Q6 O( @    Diags.ENTRY | Diags.EXIT | Diags.INFO,. F1 G; R  x3 v! s) o5 ]6 d
    Diags.RUNTIME_ON
' S4 _( O1 Y: y8 C; `: J& O);" |( ?. j4 T$ o; g1 m
" o  ]) U2 j$ `$ [8 n, y- }
var Registry = xdc.useModule('xdc.runtime.Registry');
. U" \: z4 T6 \) B  T" e" \. xRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" f9 ^" N7 a6 K+ F, }
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;- q: b' d& s' Q
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
( D- }% |5 [  I+ |. S- xRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;  z) @% L8 Y( s8 H6 |4 o+ _

+ j& l9 ^! ~; P+ a/* create a logger instance */
* Q1 B1 e  J" y! Xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# J4 n/ i& l9 a( s( N) n2 Pvar loggerBufP = new LoggerBuf.Params();
9 Y) A* O6 m% F! d! N9 m: UloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 j# h+ Q6 E: {; V& c# `7 PloggerBufP.bufType = LoggerBuf.BufType_FIXED;
. T0 ^, U1 H+ ]# t
$ y. i3 M& Q1 r$ V/ O7 lvar appLogger = LoggerBuf.create(loggerBufP);8 k- g7 D# o+ `8 y
appLogger.instance.name = "AppLog_Core1";
6 I6 U0 {$ q  j' b- z: |0 d! O2 MDefaults.common$.logger = appLogger;$ v: |1 M! X, h
Memory.defaultHeapSize = 0x8192;    8 J# T9 {0 N0 v; \, I
Idle.idleFxns[0] = "&LEDStatus";
; b& V1 g! |6 J: WCache.initSize.l2Size = Cache.L2Size_32K;
  f+ Q& b8 `* E( r7 _. @" G, N: G! v0 N- o
回复 支持 反对

使用道具 举报

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 */
- h. y3 ?3 C) V" j( Wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 L& Z2 N  \+ Y% o2 Pvar heapMemParams = new HeapMem.Params();
$ Y$ P) C& K& s+ g" CheapMemParams.size = 0x4000;$ O4 G0 F0 C# X3 j9 K- p! Y
9 d6 Q# x( G& A# i2 E
var Memory = xdc.useModule('xdc.runtime.Memory');
: }) c6 }4 n" [6 A( oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);9 f; r: U" r( H; q' G% }' t
% i1 [) ]3 W* A" y% g4 M6 Z! h
我大约calloc  每次共计大小为5K*16bits,
+ {4 J/ g" [, A0 l而默认配置才0x4000、需要改大。
3 l5 T  r# s0 w1 T; T5 K7 G1 l5 n* y; p7 ~7 i2 X
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
/ P4 |* ?( p4 u: m  \Program.heap = 0;1 J7 X1 [& M: S; Z# O
Program.argSize = 100;  /* minimum size */! ]% _) W& q0 Z9 `8 i7 S' p
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 10:18 , Processed in 0.039185 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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