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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 a! V6 t2 E( U, t( T9 i. Y+ I6 g: ]# @: B/ U
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
  `% S* R8 P+ j- E! C' i- ^1 A' h% w9 A4 P- N. w+ J/ g0 d
其他程序段。。。。。8 F' _4 n7 g& u  f$ x, ?# \
2 U# h& ?/ j1 H! O5 h
   free(x_d);
. [# q8 i0 V! i* ?7 y" ?" t; J7 Z4 G& v. l* O
使用DSP侧单独调试功能,验证动态申请没有问题,
6 c4 v- H+ [! M& v7 |; `
+ T. }$ D" _/ u2 r+ ?' u- j( u( I, j但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。0 n( E9 c; b% K

: _! m9 p  [% I$ m# h. a% I7 v% Z
! u- V1 A/ \+ E

; A' i: Y+ q8 {6 T7 a0 L; R+ z& N% _" B8 K, X) s7 T
0 \( b( |7 X4 w8 `: @

; s7 ]2 P' t+ f3 H7 O% }% B# y
, j" a' r3 T% `4 f9 n/ b
5 C' Q1 l+ H% k! H0 i* b' g% L( g/ N/ f8 P4 J1 E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 }: P5 r4 z6 y+ D- g% x  W我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下6 x# ^) G6 [" k! V6 m
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 O5 F5 K$ H% F" a3 Y2 h! C
5 q- N, g, B- X+ e0 l" n6 A$ L
是不是需要在DSP.CFG中进行配置# i! S. k* s0 [% D9 ?
我现在的配置为- U7 |- K4 q5 n( N

* Q& y. ?. _$ S/*
/ j: n& ]! N/ B6 ~. o' `0 W *  ======== Operating System Configuration ========
7 F7 W5 a: C; U4 r( N */
/ m+ h. K# k( d6 o; s* r9 `. k3 N) T0 I# ]7 K9 I  Y
/* no rts heap */' X. \4 N6 q2 N) Q
Program.heap = 0;/ a) h$ j, o7 u
Program.argSize = 100;  /* minimum size */, d1 z* G0 e: t% G. o, w
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! `1 q/ g- p& s' W9 `( N9 o2 }

5 K0 w4 m9 C7 u3 i3 I+ f9 L. W  U/* create a default heap */
6 M6 T3 e3 F$ s0 c2 }9 k: s: Nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. O6 H- W* R" vvar heapMemParams = new HeapMem.Params();
9 E6 N$ G( k" l, b" J# r- UheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 t+ K1 }% s, Y1 |+ R3 @8 k/ {
% k( m( j& Y. F( A4 T' ~- b
var Memory = xdc.useModule('xdc.runtime.Memory');
7 e3 ?9 ~, l( E. A- r: TMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 _% E: c: e$ w. t9 c
/ v- }5 {3 M: g/* configure System module */
4 e% k: ~/ v* ?( ?var SysMin = xdc.useModule('xdc.runtime.SysMin');' Y7 w: G! f: W$ }2 {" u8 v$ j
SysMin.bufSize = 0x1000;
9 J' C$ a) m3 O  l4 k7 tSysMin.flushAtExit = false;( }. C! `& t5 t& q' \

+ x' w1 @$ H8 b0 Wvar System = xdc.useModule('xdc.runtime.System');
5 V0 b0 K/ p) Q, T2 J9 N7 ^System.SupportProxy = SysMin;
# @: e. N* j: C5 y$ w7 h+ @$ x
# D8 u" N; S0 a4 D: Z3 x/* configure SysBios to use the lower half of Timer 1 */
9 O4 [% q7 d- X% v2 s! fvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# S& w1 P8 m3 `- K& S
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
2 s/ Y1 V" M3 s1 O6 uTimer.timerSettings[1].master = true;
5 C: A* n# {( Y. v, n/ ^1 T" ]3 ~Timer.defaultHalf = Timer.Half_LOWER;- q. ]. Y% B8 b' I) I5 E5 F
Clock.timerId = 1;/ S* f% h, B9 L0 W
/ E/ E( K; p" I% R6 s) G& W7 J7 X+ `

+ D& ~- ^' H# a8 o3 V/*
4 L! q3 T* S4 Y# C *  ======== Miscellaneous Configuration ========
3 d7 q  g5 h6 p# I; V+ Y$ I! x# H- A- ? */
, o- \; w. {& g, H$ M$ x, V  e$ a8 |1 \$ i
/* set default diags mask */8 W+ p" C6 ^2 J& n
var Diags = xdc.useModule('xdc.runtime.Diags');
  b1 c1 d. k8 k8 @var Defaults = xdc.useModule('xdc.runtime.Defaults');7 z9 T$ ?5 q4 x" _$ e8 H2 b
( ]0 T) A/ }6 G: V
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;$ U6 t6 L# \" v5 k
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; S7 @; t# ]# QDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ I5 P& \: ]3 I
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' h; [. x. _% b$ R1 sDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
8 e  U' M0 \5 SDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;, ~6 A+ o1 b- A( q+ I" T
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;& A% w6 k9 ?2 R! b
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;, a1 i8 X2 K+ d9 i# Z  C& S6 I0 M  K
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 V2 F5 h0 p( i3 l) G, S
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 _" [7 L" \" L3 z: d/ ?6 @4 M0 g4 SDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 `6 [2 c& E/ m3 ?4 iDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 H/ _" H/ K% l( j/ e4 a; N+ [Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# F; q  y, c; `/ U  M0 _
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% e& [! r" S0 o- d+ u- p! y: D1 T
8 }& V- ~! D/ d1 x/* override diags mask for selected modules */
6 E. {- b9 f& M; s" g  r4 Sxdc.useModule('xdc.runtime.Main');
( t0 H" u' j; yDiags.setMaskMeta(
1 l. K$ ]- d' @( g3 ]    "xdc.runtime.Main",
2 o9 \# u+ m2 N8 X% |2 g    Diags.ENTRY | Diags.EXIT | Diags.INFO,6 y( J1 n) M( F$ P
    Diags.RUNTIME_ON
8 u* k7 Z$ ^8 n3 e6 L* T);2 F- W3 Q9 o" }* Y2 K1 w' S: i

  D9 c3 ]& x8 I/ Wvar Registry = xdc.useModule('xdc.runtime.Registry');) Z. A. f4 U  i+ s
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;( I: [) d3 ~9 e
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 N; s0 ]8 z% N% Q$ P! [Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;( Z2 K# m" ~$ U0 \. `" N7 |' }+ o
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" l' S( d; |" P
& E) X# _* v5 G7 u4 Z9 R5 y+ H/* create a logger instance */# v- b' y% G8 t4 K! _: Z7 l
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 _* j9 U6 k- j4 cvar loggerBufP = new LoggerBuf.Params();
$ i4 a+ {! H  z4 {  u% H6 n. m* uloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
% c8 h) K( j9 SloggerBufP.bufType = LoggerBuf.BufType_FIXED;
" K; o; _; R: M& x. ]* I$ l) M5 e
  t" U7 [3 {& nvar appLogger = LoggerBuf.create(loggerBufP);3 c. Z5 w) D& X! Q1 L" K2 z7 p
appLogger.instance.name = "AppLog_Core1";
& J+ `) c- F3 \, a( uDefaults.common$.logger = appLogger;
6 {7 }" M( u3 j) ?$ X7 B, JMemory.defaultHeapSize = 0x8192;   
: w: L2 u9 k( a- T5 ^Idle.idleFxns[0] = "&LEDStatus";
$ F! Y1 k9 V! j, ?1 p7 a  kCache.initSize.l2Size = Cache.L2Size_32K;% H, l0 D% C' e8 [

& L' S% J- Y, p( x
回复 支持 反对

使用道具 举报

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 */
) G9 Z" c# X& h& G" W% wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ I9 j+ R2 D" ^) t/ f6 X5 E3 V% g% ivar heapMemParams = new HeapMem.Params();6 m  |: @8 R# K8 ^
heapMemParams.size = 0x4000;
" A% h4 n) C! O% {" N, i: `* m, }3 d( g
var Memory = xdc.useModule('xdc.runtime.Memory');
& _% S; P9 z# Y, f+ jMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
' k6 T- P& c& X' o' i& {( x' I4 S
我大约calloc  每次共计大小为5K*16bits,- q1 _7 e& T! D3 ~" @6 t7 l  Q( H% Q
而默认配置才0x4000、需要改大。7 D# r! X. f4 a$ g- r% c

) ?: n3 l" _% w+ Z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) l0 L9 ?  G& r) iProgram.heap = 0;9 d, E- o- m) B" S7 I; _' f. C
Program.argSize = 100;  /* minimum size */
4 E* Z* M: `2 s! e! J+ @( Y! _Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-29 09:24 , Processed in 0.041810 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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