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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

8 i% W# Q. S4 F/ L1 n    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 B; w4 ^* e, U6 m. z
8 g  o5 }# Z0 M" ?' y. p. ~, ]- E# E/ O其他程序段。。。。。% D: E, c/ P/ k8 B

! u2 ^3 v: s- E" `   free(x_d);4 X+ [2 w1 u4 `/ Q5 U# R
9 w+ D3 m4 c0 D: O5 h0 v, d
使用DSP侧单独调试功能,验证动态申请没有问题,
4 r2 M3 K, e5 J& E# a
$ b# o1 y% A: T5 _但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
) U& T; D7 @- Q2 `8 A8 q

4 R3 p& F0 q5 s9 q% m
# g, j, \" z6 J  k* x7 z4 M  H
: j, H* ^6 ?! A! E$ j; V# O' R1 F  a% W! O

2 f3 z5 I- M7 x! V8 A- w& M2 f; U
$ h/ b4 l& W0 N
  v* e. t6 V% j2 x  S% Z1 R: B

. Y/ x- |; ~8 m/ \/ y% H
3 j' ?- [) O/ H/ g- Y2 g& {% R4 b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: l/ R  _) l: q4 x9 n6 T我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 z) m6 j$ h$ K0 @; }9 P7 P  j
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
) d7 J% y/ d7 M% P: r, C2 r* f
4 q- C7 e9 ~  X* m# {1 H' |
是不是需要在DSP.CFG中进行配置
5 P% s8 k" w, L4 _1 J我现在的配置为
$ s9 t! S0 U9 Z, `$ k! E- g
+ B+ |; |5 |0 U' t! s/*
, @1 O0 k6 A' I( b- i/ H *  ======== Operating System Configuration ========
; P. y/ T. F1 P2 ]0 k+ E */
( N8 F2 K; H. r% t5 b( k6 ?9 f" h" r  c* ~" e
/* no rts heap */
3 y% C! m& i3 V% i! X& }4 PProgram.heap = 0;
( w( l$ U3 n7 }' I, cProgram.argSize = 100;  /* minimum size */0 h* d1 _- {$ j+ y5 L5 t$ s
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大2 y- U9 g# C0 Q; {1 Y, e

8 |, p% |, ^+ j/* create a default heap */
3 i- s0 ?- D1 L: zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# D- }) R4 s3 ~- V& m
var heapMemParams = new HeapMem.Params();
0 ?7 j' a6 a! F+ N( VheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 y3 P" p2 b7 c$ m- `$ t! x
) E9 O& k8 O( [+ @
var Memory = xdc.useModule('xdc.runtime.Memory');
% ?* Q" j, ]% V$ c9 B$ GMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
; c6 n- d* k) h$ ~' p  b& p8 H- L2 t; ~" y6 v- k2 p
/* configure System module */7 @; ^' y  I  K/ y5 l
var SysMin = xdc.useModule('xdc.runtime.SysMin');
: e5 n. _. D) m, g- OSysMin.bufSize = 0x1000;' d$ F; g2 r; a7 w
SysMin.flushAtExit = false;
' C% C: q  g. t' f
. r' y$ ~; W' v7 Kvar System = xdc.useModule('xdc.runtime.System');; x8 o" M2 b: y0 o
System.SupportProxy = SysMin;# M5 x9 B, ?$ `! [( A, i6 G

  s- O  Y8 E8 ^& A/* configure SysBios to use the lower half of Timer 1 */
7 ^+ M# z3 K8 a' ]var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 }  _# P1 |# X0 X6 b( b+ O# Q/ Svar Clock = xdc.useModule('ti.sysbios.knl.Clock');
  r& k' o. A/ Y# ~9 ^Timer.timerSettings[1].master = true;7 Q7 ?% E% Y) ?) l. R0 }! ~( K
Timer.defaultHalf = Timer.Half_LOWER;
6 T, F: i7 I- n4 u4 Q% v! b" xClock.timerId = 1;
  [8 j$ t1 k$ Z
1 q  d5 }  I% z9 I+ k' f- L
8 E6 @1 ]" [$ U: y7 m% a/*8 Y1 B% @; C! ~
*  ======== Miscellaneous Configuration ========
/ J5 `5 V7 r2 {& i, U& H" h */: y! W9 I: p  Z) O

- B: I+ `- l; _% _9 y- g$ v/* set default diags mask */( @7 x/ Y1 |- ]/ c
var Diags = xdc.useModule('xdc.runtime.Diags');
$ h$ o4 D' b' V! w  s- f: J" Q9 Mvar Defaults = xdc.useModule('xdc.runtime.Defaults');, z3 a2 |; P5 f' {6 v$ Y) q+ o

2 Y! U: W3 |+ k# A6 j. J2 _9 MDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ B  S8 p, k1 M. R: `2 Q
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
5 U9 I( C; z0 J, Q* E2 I  Z) F8 |Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% H0 p& Y  n% ]# P8 JDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
* Y/ `; N: w/ P" f. zDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   *// a" D& O% G# D. k. Y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" w  S! q6 r- a7 i/ W+ QDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) w3 f5 b* W1 K2 C$ i! C* F5 w' B, A
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, Y( Z5 _; k  ?1 A) d0 xDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 U9 k& b1 G: [* K, ~8 l( `Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;: \. s& I. F+ ~
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; ]! [1 M8 b2 o8 C9 lDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* i0 I- c! s% p' ]& s
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 U: t+ k+ }& i0 j- H
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ _) S, [' a7 i: w  b
; O3 X  ^% N6 t" F/ K: d/* override diags mask for selected modules */
& N! X. b8 T0 z* t8 a. [6 T, cxdc.useModule('xdc.runtime.Main');
" m5 r- s) F) ~) |( S/ u( D) mDiags.setMaskMeta(
: E5 Q2 o! H* j1 m' `, A  F    "xdc.runtime.Main",
5 X1 \( i' i. S1 b6 f% w' a* r    Diags.ENTRY | Diags.EXIT | Diags.INFO,5 K$ t; S: y0 ]# a, H* k
    Diags.RUNTIME_ON2 O3 t# B/ r8 O! f# Z! J
);! q+ S9 Y! I' E' V$ U9 ?8 ]) m$ d0 N% q
; f  N1 [. H! Q3 ^8 E: i) N: U- f
var Registry = xdc.useModule('xdc.runtime.Registry');
, H& p6 b- q9 W2 I; yRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
1 ^  N& N0 }9 M  Y+ P1 f3 \Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  U2 c3 ~, E0 r% d7 J$ ]
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& i6 C5 b; c  u1 {4 ^; y6 A  Z" lRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 Q7 I6 \6 F3 D

; l& }" T# `1 {! z9 K/* create a logger instance */
' N. d: J$ ]2 svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; t2 q4 I4 K6 ~! C" Zvar loggerBufP = new LoggerBuf.Params();* i4 ~2 ]0 Q; c1 e
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. T! M5 n0 n$ _# x: e, SloggerBufP.bufType = LoggerBuf.BufType_FIXED;$ m- P7 D, e% I7 ^/ v3 m- X

6 f# U/ J  S3 E. Q* y8 J4 ^6 dvar appLogger = LoggerBuf.create(loggerBufP);7 _  J6 i9 h! R* M3 r- G1 H
appLogger.instance.name = "AppLog_Core1";% G5 p* }- [) }7 o2 T/ S
Defaults.common$.logger = appLogger;
. t6 Q  Z4 g: C% f, dMemory.defaultHeapSize = 0x8192;    6 S5 s. s1 y  W# C  Z2 Z4 h/ b
Idle.idleFxns[0] = "&LEDStatus";. P; r$ k! d+ G
Cache.initSize.l2Size = Cache.L2Size_32K;( j+ m- m. \  \. ]! h

% P% h- t2 L, R7 F0 y* b3 H+ i9 {
回复 支持 反对

使用道具 举报

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 */
" J8 p. d$ H. B" \! P4 h, Y, ^2 V9 kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  a  z4 J& A6 C; T% Ovar heapMemParams = new HeapMem.Params();
% P* c/ Q0 T+ NheapMemParams.size = 0x4000;
& h4 f1 C: g  p  L) E/ G! E4 P( c$ r5 ?2 F! A! Q
var Memory = xdc.useModule('xdc.runtime.Memory');
- @- ~/ i/ J2 |7 L4 o4 qMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
# E3 K1 r# a: k  R" T* \; d% C5 Y! U! Y2 h9 a: }+ I
我大约calloc  每次共计大小为5K*16bits,- P- e0 l: d8 s5 `3 _& q
而默认配置才0x4000、需要改大。
+ u- r: I$ K- G( V/ b2 q- {7 q1 W& M4 B- S5 w
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# o  M- S1 k5 U9 U  TProgram.heap = 0;
4 D9 M- g1 r7 e) {7 e" h! ~4 LProgram.argSize = 100;  /* minimum size */
7 F* s3 T# w1 k" Y- c2 oProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-15 06:45 , Processed in 0.054060 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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