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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

' w( U& V# v# p1 _+ X5 X    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
6 o3 C1 ?4 ^$ _
. @, h3 a+ _1 c# ?9 C1 U+ g其他程序段。。。。。3 Y6 Y( V. d5 ~$ |2 e2 S: {5 m. v

7 t6 e/ ^" \; `4 [! W   free(x_d);. [9 n0 x  m& q0 x6 {& p

! u1 ~0 p& B! E1 W9 s使用DSP侧单独调试功能,验证动态申请没有问题,
+ c6 H6 j( f9 c5 O
; w, Z+ E8 \8 G4 q但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; P) e+ B+ E# e

# ~8 v' H* o# |0 `' V) ^" C' c0 }2 T6 B+ T

# m1 z& W3 X6 W5 N5 q& m( [5 u1 G! B# S9 z" D: x4 H3 g3 ~- ?
. T5 K  \  _& X. [0 z+ _. ^
. H% S& {+ l0 w: P: x
% j5 a7 h7 Y8 s3 k* p4 B6 F
) \3 e4 q0 W# R3 ]
. u1 D8 @+ B: C6 V! `
$ [! A7 J4 V8 u/ u2 Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
9 g+ |7 @' v9 b4 T( [& m我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
( t$ \  |. X; y7 ~$ z: b(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 H7 y2 o- V( e) v6 m
- f( `" _; H, G! e# M* J( }8 M1 W
是不是需要在DSP.CFG中进行配置
- `; A/ u  p4 X我现在的配置为
6 Y6 q( F2 Z6 U, t  O/ L+ h
3 `7 ], ?) M+ G& M' U/*4 W/ ]8 Q4 q  Z# N7 a0 U3 d
*  ======== Operating System Configuration ========
1 X0 R: Y% l" q  E* T */# x5 x2 G* U0 G5 H: g& `. F, v7 s! J/ K- `
* _2 A% _# `, b* o
/* no rts heap */$ w- T1 X+ N" X" O) `" i
Program.heap = 0;! @" g! `6 v  n$ H* P5 x2 u
Program.argSize = 100;  /* minimum size */
3 F, h) S, R# r7 ]/ ^) \# e+ WProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 O# X/ J/ s4 K. S! I# J
; h  T1 M1 E3 f  t& d: ?$ H/* create a default heap */
8 u, R; A* k' Q& h7 Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ W+ N; L4 [) B$ S( p9 }0 V. q
var heapMemParams = new HeapMem.Params();$ v3 J5 `, Q7 @8 g- J: l1 G8 H
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" O% H1 U$ c. {* S( [% D
$ h! p9 R3 P' \* l% u) T
var Memory = xdc.useModule('xdc.runtime.Memory');' G: M5 E+ ^  m
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  c4 Z  F. Y& g) _

' m8 B1 o5 D$ T0 y/* configure System module */$ J9 t  P7 {5 L. h5 I0 H* @: b
var SysMin = xdc.useModule('xdc.runtime.SysMin');
, v3 W. E/ t. T* T5 XSysMin.bufSize = 0x1000;. j, R. O5 H4 e( s$ ^# f1 ?3 H
SysMin.flushAtExit = false;% T* X2 @+ n4 [! E2 p

8 c/ Q  t' o$ K1 O8 W: d% }( c7 svar System = xdc.useModule('xdc.runtime.System');) }. V9 I  }, p# j4 X7 Q- _2 x9 g
System.SupportProxy = SysMin;
( t  F% g3 P6 _1 \. T( D7 P
$ Q. j0 M& q- J) x- ~/* configure SysBios to use the lower half of Timer 1 */! I# s  c" ~8 b* r
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( Q  {7 [) V" q0 t5 E& o7 fvar Clock = xdc.useModule('ti.sysbios.knl.Clock');$ q& u1 k5 |9 v2 _
Timer.timerSettings[1].master = true;
# @  X0 \" \+ H9 D8 t: N2 A; D: KTimer.defaultHalf = Timer.Half_LOWER;
1 q- [# z) u- E* \Clock.timerId = 1;
- E: l1 V  k7 @6 j, l7 r8 G; E2 ~; N4 e3 s

5 p4 l. F7 a: }! k+ A/ t% A& ^/ v/*& O4 u5 a2 o% H% j1 t3 b
*  ======== Miscellaneous Configuration ========
( M$ i% q& n) l8 U: A; ~ */' J- B) G! t: f9 x. r! x: h" M2 C

7 [2 m, Z7 f5 I# T  y/ D/* set default diags mask */3 ?3 R! H& [. y9 L& {
var Diags = xdc.useModule('xdc.runtime.Diags');* j  [  d; V# c" F
var Defaults = xdc.useModule('xdc.runtime.Defaults');
7 u% n5 y- W- s1 r( X' g. ]! X; z
1 X9 d$ u( m. q  v+ M, R( M5 g/ _, tDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
1 W7 b( y5 h1 `% m8 JDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' e2 U4 h  `) m4 }0 t$ e! q. @
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# Q; a8 U( `% I0 p- K  B$ o. ~" B$ DDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 {& D/ J3 y+ L6 g3 S- R+ lDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
8 t; z  \3 y/ jDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ e  ~, y- @+ m
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' ~7 S8 @6 O" SDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
5 m+ ]( v+ N2 \9 E8 U5 y: iDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# j; t- R4 Z* M8 k, e
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
; e& ~: b( @, e1 J3 G* y& jDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! g/ @8 p0 `2 F2 v% a6 ^Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 ~9 e/ U. A4 l% N/ H' C8 C
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;& S  h* W' D1 p2 G6 s
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* U" q3 m# Z+ X/ ]7 b
9 A+ a6 o% y: i5 Z2 G
/* override diags mask for selected modules */
3 Q% l( w( \: U! R# dxdc.useModule('xdc.runtime.Main');
3 S* @; r, O, p2 lDiags.setMaskMeta(
5 y+ n, B7 e0 s; T- t    "xdc.runtime.Main",; \" c/ j. m- G: |% q% O8 i
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 Y( X0 J  ?9 J    Diags.RUNTIME_ON
& \$ Z  Z2 J- g  Z9 z, f9 {$ e( E);: q) i, B7 A# ^6 y% J' x  z
! N' o$ T' ]8 A* A
var Registry = xdc.useModule('xdc.runtime.Registry');
% V7 b' t8 Q6 I) t* d+ D- \Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  ^0 T1 N5 q7 c& E1 o
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& Z0 v$ o7 V9 ^8 a6 ]) X" z& MRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) J$ H9 ^+ R/ n# h  K, }# pRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;5 P4 M$ m- V5 ^5 C/ f+ R

7 S/ m, @" {& d; x/* create a logger instance */5 B; f4 }. o6 p4 D. J
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; a4 J! a& T. f- [- Dvar loggerBufP = new LoggerBuf.Params();
8 K! C0 P1 Z/ k: O$ b1 _loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% W- n# J* @* r" ?0 g8 F
loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 ]/ T6 n5 m& T+ ~# v

" z) F2 I' y+ T% i  Gvar appLogger = LoggerBuf.create(loggerBufP);
1 j2 ^1 ]2 \- ~# {- U( b; xappLogger.instance.name = "AppLog_Core1";
" I* r' [( w# a) }8 WDefaults.common$.logger = appLogger;
% Y+ I9 }2 f" c  S' x! L  ]4 q' o: l; }Memory.defaultHeapSize = 0x8192;    3 S# {$ U* M# @. H" U
Idle.idleFxns[0] = "&LEDStatus";3 }: I! S2 w* v4 F  a  L% X- s% q
Cache.initSize.l2Size = Cache.L2Size_32K;
/ G3 k* L7 J- S9 ]. N
- Q5 O+ z3 a, l0 Q
回复 支持 反对

使用道具 举报

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 */
1 _8 }% g- k! h; [1 s: xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ `. g+ ]' G, Z  A3 [% bvar heapMemParams = new HeapMem.Params();9 b/ B4 r7 I3 y( J4 \0 ]2 B
heapMemParams.size = 0x4000;
5 N. }+ M0 N4 C6 F; B6 |3 S$ }5 B8 t
' K& Q; D, b, V) k& Y5 o5 A+ yvar Memory = xdc.useModule('xdc.runtime.Memory');9 b. P7 p( W9 S. }( ~6 z' |: D
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' d0 s+ H3 @+ W. G0 Y% Z& ~7 |8 r' e  e
我大约calloc  每次共计大小为5K*16bits,
" V& Q$ _3 ]* w' O- `而默认配置才0x4000、需要改大。
+ Q; U. c3 G; P5 C2 S' @4 U$ C7 n' e( L0 W6 H4 p5 `5 v9 Q: i. [
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */3 o; v' R/ o- B. C8 t
Program.heap = 0;5 t- L7 M0 T" G
Program.argSize = 100;  /* minimum size */
( ?/ }6 H; p; ?. N, w# U9 A) l# xProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-30 06:04 , Processed in 0.041657 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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