关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ v$ d8 O/ |. x* ^/ c8 [+ ]* p0 `5 F: ^: L. d# b2 P! @
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2568 h' c, Z' _6 d$ i* e" O5 V
; r* ~, R/ \/ d$ f0 F
其他程序段。。。。。; h, U/ F& p. |  P1 _& r& i
6 V' H# ~+ Z! w) V5 m2 u
   free(x_d);  V$ s8 t2 \, W0 Z, ]0 ?8 c6 W# I
& k7 r6 u4 ~3 {- g# \: }: f
使用DSP侧单独调试功能,验证动态申请没有问题,
/ s2 S& B* z7 P- |3 O
& [8 t* G7 m( z但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
2 [5 H1 I# C5 B9 S

) g8 _4 i/ K. C/ Z8 U6 m' q3 @1 R0 n$ F
- `( U" {0 o$ u# f+ {4 K2 w

* \; _, m  @7 k0 H6 J  c+ _! d2 G! t/ x4 [7 r. U3 U7 M; V( w1 p
$ T$ l) I6 i( W
% c/ C. L5 @4 g3 L- q* i1 i

1 {4 }1 n4 f2 y( L, u* T, \& I1 P8 B8 B

8 W& G! y, r; {5 {, m  T, J3 Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 s. Y! {5 [* ^" Q5 i1 A
Program.heap = 0;7 P" c# m5 e( |* P7 {6 i) e
Program.argSize = 100;  /* minimum size */
$ A3 {3 e# B5 j- p8 n6 {& lProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
" z" Y& o5 i! t- l+ Nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. X) X3 m6 m) u. K, s9 Z- S
var heapMemParams = new HeapMem.Params();! I8 H! r! s5 i! V
heapMemParams.size = 0x4000;
2 {# W" @* r& ^4 L% l( ?' n, u! j8 S" I" W
var Memory = xdc.useModule('xdc.runtime.Memory');/ f6 p/ c  E" n2 a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 F1 C( \8 t0 @
8 o# N  M( a+ c/ h$ b% B0 J; _! W+ n
我大约calloc  每次共计大小为5K*16bits,
. f! }, I" N6 D4 p! v1 z而默认配置才0x4000、需要改大。: k# u" ?  }) c/ f' B$ r: o! a
( j* m! A  p( \' I. ^
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明& ^8 B: c! K% u, u8 K/ Q9 U
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* c0 o0 w+ d4 Y2 o. u% S% O(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: z. y8 H) g( Y
9 x! W/ q7 h1 Y" I7 c, `
是不是需要在DSP.CFG中进行配置# Q# x4 V' j. b' a8 X0 m8 D
我现在的配置为
8 ~0 D/ z( m6 Y
, q( |5 O& G" {# U! ?1 _2 [/*! h6 \1 x3 q6 B8 z
*  ======== Operating System Configuration ========
/ ]8 Z) o' g) B+ N9 ?8 q */
1 C+ S6 E& @6 L) P  ?  B6 S% j1 y0 G) y: n8 ?
/* no rts heap */
" ~) D8 f, u  M$ o) UProgram.heap = 0;+ v  d5 g) _0 y9 s
Program.argSize = 100;  /* minimum size */* t( w9 a' a8 H% u+ C
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 q; b( ?2 }" u" L+ B/ D% s8 s0 k/ n
/* create a default heap */
) c) G: d8 b) _4 w" K& ^: Avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ d# v- t: \. ^, O4 a' K1 nvar heapMemParams = new HeapMem.Params();
3 C8 ]* @' q9 RheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* T- Z& |( S1 G) f) p% E/ N( N7 V3 U0 F

8 S& m: `! J; t
var Memory = xdc.useModule('xdc.runtime.Memory');2 J# V: U4 N8 ~4 ?5 x
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 n' O& F: Y7 T# ], C6 m; G
# F6 `7 h' W6 A4 a- g/* configure System module */: V9 r% Y1 Z6 ?1 u2 A
var SysMin = xdc.useModule('xdc.runtime.SysMin');& O. _. M, n/ Y5 `$ w$ Q  I
SysMin.bufSize = 0x1000;7 l: Z; Q3 [) q2 Z- H9 ^
SysMin.flushAtExit = false;
" W: }1 Z  ]- W/ n) k& V$ E: a0 H" B4 z; g$ I, m) D8 l( ^
var System = xdc.useModule('xdc.runtime.System');* u; G$ @$ ]0 }
System.SupportProxy = SysMin;! e8 \1 C6 |* j
6 y" P$ F8 w- u4 q3 ^
/* configure SysBios to use the lower half of Timer 1 */: F6 \" L, k0 `1 p& D) g
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
" q" a* S- [# O2 f% t; cvar Clock = xdc.useModule('ti.sysbios.knl.Clock');: F4 ^0 m, S8 A1 ]: ?2 T
Timer.timerSettings[1].master = true;
' c' J0 H9 D& s5 RTimer.defaultHalf = Timer.Half_LOWER;7 I) Z; ^9 r5 m: a' l
Clock.timerId = 1;$ i2 F2 D& t) d4 g
+ r# v6 k* N( I& w) U4 A

( c4 _2 L6 K# u6 R& D/*
) L& `  F; c$ ~/ E9 ^" g: J *  ======== Miscellaneous Configuration ========
: ]/ B' T) h8 i+ s: M */. Q/ z: }' [$ D- d

; _# p& X( O. ]' C/* set default diags mask */
9 j* X! H. P8 n" R- `( |var Diags = xdc.useModule('xdc.runtime.Diags');1 U/ ~$ J. `6 m- z
var Defaults = xdc.useModule('xdc.runtime.Defaults');% g4 x3 f6 d% ?
( l; J, E0 M7 [5 }$ a+ n
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! c/ q$ d) T- v+ m) p
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 l* w- b4 S4 d: b$ D9 A
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;: U  Q4 f7 o1 S: s, _6 d
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' @# c" B. _* ~6 ~' J
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- T& T( ?2 a: F$ m( ODefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ T4 b3 w- L5 s' v( x$ e3 ]
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! F1 N( {0 S  H" U5 a# ~9 ?! Q# A
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 N3 I( P4 Y5 I- ~
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! j6 M: F0 H, I+ a2 [7 k. vDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
1 s# H% m8 }* Y  a. I2 j! c! W; Z  VDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;+ G/ K. Z! N( E( n0 U
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& s9 Q: g/ a$ z) a5 P% J4 f
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& S& R1 I) z# _* ?# o" }Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
, S. p) U5 U4 s8 @; v4 M3 i8 h
0 c+ {1 I6 K! y) \# a) ^/* override diags mask for selected modules */, z" r# y* A3 G
xdc.useModule('xdc.runtime.Main');
, X# Y1 d9 n2 f9 kDiags.setMaskMeta(
! ^. i( [' m' @5 E  a- t    "xdc.runtime.Main",
! n- v9 i$ Z. ?, ^    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 r6 x' s) B" L  X: |  q; u$ w    Diags.RUNTIME_ON% E7 `; j/ |" `: ^) _  Q
);
- ~, r3 M! d5 B; z
! v! _( S- O4 R2 {. j* pvar Registry = xdc.useModule('xdc.runtime.Registry');  U1 M$ O) Y9 K/ A' A- Z1 d
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 @5 U# m! l/ {6 n
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* M5 \* |* X" V$ m# o8 j+ B* n  c2 KRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, N% u6 ~: ?( L3 r* y5 NRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;  f2 `$ Y( Z2 B& s! ]: Q! e% s
0 _- ?$ X9 i! c# f. `& J0 Z" ]2 ?
/* create a logger instance */2 _* D. n7 ^# p( k; K% q: [$ c
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ `1 }. H  S3 \% a4 ]$ V, xvar loggerBufP = new LoggerBuf.Params();
% j* Q# k" j/ v- p! w  E) d8 |0 UloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 i) E9 t/ R6 h& l- K! v/ floggerBufP.bufType = LoggerBuf.BufType_FIXED;+ i. ]3 S0 z% Q

  h6 e& ~/ N; ]# S! ~) c) ]5 evar appLogger = LoggerBuf.create(loggerBufP);- D3 `5 q7 {" s( _- F* B
appLogger.instance.name = "AppLog_Core1";
+ A1 f# g( s- f* ~3 `) `Defaults.common$.logger = appLogger;% z/ m% `1 I: _6 l2 P  O
Memory.defaultHeapSize = 0x8192;    1 E/ M' H2 X4 |7 k/ I2 B
Idle.idleFxns[0] = "&LEDStatus";" H7 |7 b3 Y( i# N9 C) i6 G; F
Cache.initSize.l2Size = Cache.L2Size_32K;, U% ?6 H- M; Q) g* a8 D* g! j
! B! _4 E3 [, J" L
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-2-14 11:38 , Processed in 0.043976 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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