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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 m" h2 r: ]6 H1 \4 a; Q6 e
- q4 C( P; J5 }1 F$ @- ], w    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' l" z5 r  K3 }

, v% N6 v+ h5 w其他程序段。。。。。, }% x6 o1 |5 Y

6 M! E% c8 a/ y6 X   free(x_d);
/ c# a- Z* ~( Q, [& X% Q: s' o6 ?& t4 @1 c3 b" U
使用DSP侧单独调试功能,验证动态申请没有问题,) V; g+ D0 n0 ]1 `
$ \& m6 Q# i! k1 }6 E
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, b. n# J$ i& O6 Z
# A# f% f& @0 o7 q
- {) J% s$ x9 A. `) j! |+ i3 k

. L9 \; ^/ ~0 g7 P6 C2 f5 l+ l
- V  j; w% |# K- f- l' V
7 m: x4 p* G! b# t4 ~: U  I$ n* `( I- L( |
3 a* F) p& D1 V# j: o$ {* Z5 C4 O
* ~# M9 N1 [% j
; w  a, A( {  ^  z
+ f) G1 o7 `" E- H1 Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明' ^; x2 p" \  ?9 s
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
( X& ?* @! B! }9 `- x(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ h0 B9 v8 [/ _3 c6 d6 z

; U! a  e: z" P是不是需要在DSP.CFG中进行配置4 M4 n% {2 z  n4 W8 u4 v
我现在的配置为' ^: ^* d) o- d9 Z$ m8 t& {

0 b  i( A! D" j+ R+ ~! r6 J& E/*
- a/ S* Z3 ?3 i' Q4 A *  ======== Operating System Configuration ========
+ v& r$ i0 R9 n& M2 J */' [9 M2 E$ y8 d
7 Q% j7 [# d7 w3 O" @5 q( i9 I
/* no rts heap */  G# A$ S5 l" l) b/ T& X' n/ W
Program.heap = 0;/ H+ I- y- F4 m  M
Program.argSize = 100;  /* minimum size */( [$ Y; [( F! s# n, w& t
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
) x( b5 n" |5 I+ |* I0 o* ?7 O
! t3 ~7 K/ Y8 \2 ~( o4 t/* create a default heap */
1 c0 B$ L2 r7 ^) H' a; Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 `' O$ Z+ F& D& [  X0 ?1 y
var heapMemParams = new HeapMem.Params();
( ~& H' R; X5 C8 @& S# W4 m9 v" KheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ t* s+ G# E3 s/ E9 l) J* E0 M. M" I! v
var Memory = xdc.useModule('xdc.runtime.Memory');
  [, X& X4 i+ W4 p  S/ VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 x6 [/ e, O/ G% \7 J8 ?* L6 N: |8 A5 {" J1 o
/* configure System module */( b# ~6 Z% j7 Z& y' L! g
var SysMin = xdc.useModule('xdc.runtime.SysMin');3 a1 _  J! p( t" }5 M: |  \
SysMin.bufSize = 0x1000;
0 o9 E( m8 Q4 v3 [7 kSysMin.flushAtExit = false;
5 K7 U4 g9 s. ~8 h! |' ~+ @) q3 u! f0 K2 j  F# p
var System = xdc.useModule('xdc.runtime.System');  u& w) X; ?) T/ c- n3 v
System.SupportProxy = SysMin;
$ R* G) @4 t( ^% h( T* M4 n3 \! ^+ m: _
/* configure SysBios to use the lower half of Timer 1 */
* g* p: P: V/ ~. F4 ?: nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 l) c1 h$ R5 O  e: {( t! Nvar Clock = xdc.useModule('ti.sysbios.knl.Clock');* ]1 e* x( f- L3 r" q! e
Timer.timerSettings[1].master = true;
8 W. ?  @, H# J0 v5 dTimer.defaultHalf = Timer.Half_LOWER;
2 Q& w) w& L" `& YClock.timerId = 1;5 d% f- Z. D+ f- q1 T' q/ T
7 S3 Z- P7 k. e0 Q' p
. f) C  Q) n4 E+ c* F
/*
2 P  f5 L9 X' t3 E; o) R *  ======== Miscellaneous Configuration ========
. n: T( G6 H8 A! T1 g" z2 ^ */2 W% _- Q- T4 A0 D0 q

# t; |" Q6 x8 i/* set default diags mask */
, p) g6 y# D6 J9 M- l6 p: |var Diags = xdc.useModule('xdc.runtime.Diags');* f  f! }' V- T8 m2 U8 r4 v) Z
var Defaults = xdc.useModule('xdc.runtime.Defaults');
' O2 l0 n- x% H& ]  u; k/ [9 W* E+ m  d7 |
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! @9 x7 u! }$ F. G$ B( w
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. `" T& u7 y3 f! m+ B4 O% tDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# Q7 t  g7 U; I% M8 y! i
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 K7 @, P) |" C2 O/ _1 rDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 s2 J7 h& M7 j3 Z4 rDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ l! n% X' N! A: F# P$ F
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ y, X) t# {4 E# K  z0 J$ j9 E
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 U6 L% ]+ L- Q! D! `Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 P; v8 w9 E. u8 v( C, Y  z# oDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+ e  i  Y; `0 {  `8 pDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 ?5 d5 i) a; g) n. ?1 G5 B! dDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 [$ W# k4 ^" D0 l; m% `Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;+ F. Z, c1 k7 Y& v
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% q% ]  g, V! N
4 O8 H1 H: }' H  b* b
/* override diags mask for selected modules */. _5 N( T6 `! C9 A1 k
xdc.useModule('xdc.runtime.Main');1 {  U3 H1 \2 p( Z
Diags.setMaskMeta(
3 d2 g- O8 Z9 [5 w2 p& y1 P    "xdc.runtime.Main",
& Z' L$ y3 q- D! r6 \! B    Diags.ENTRY | Diags.EXIT | Diags.INFO,
& s- \/ D0 l/ f% V9 n7 i    Diags.RUNTIME_ON2 p* D/ s( @: P
);7 g* F, g+ U% @/ |/ ~
1 y# Y2 a* O3 {" f: z8 @) c
var Registry = xdc.useModule('xdc.runtime.Registry');9 O, J( I" z: Y; V- {
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 v; M- }+ B$ bRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 J/ T- y9 }0 t9 y9 J5 k) d/ M
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; d, i4 A/ `% v. E$ x( WRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
6 O. h7 D( K* e. `8 b$ Q" j, R. |1 e! F8 E6 s# m
/* create a logger instance */
$ G# X5 m8 d7 Yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ J- o1 L! O" P8 l
var loggerBufP = new LoggerBuf.Params();
& {7 {5 p. {9 v/ w  B1 L3 SloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' I  G: C% z! d/ jloggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ Y( _# Q* D* P6 H0 U* T
" Y! L3 i2 C2 j$ V4 Evar appLogger = LoggerBuf.create(loggerBufP);
' |& d( `% F: P3 }4 A4 fappLogger.instance.name = "AppLog_Core1";* `/ {* Y  }( m7 C
Defaults.common$.logger = appLogger;' m5 @) ~6 ~) b" |& ^5 _
Memory.defaultHeapSize = 0x8192;    6 U" Y, `5 Y$ ~% p: k) g
Idle.idleFxns[0] = "&LEDStatus";
7 h' t0 o) d* U, j7 H9 L, FCache.initSize.l2Size = Cache.L2Size_32K;$ H7 D# H5 N4 Y
3 D3 a( e5 l5 S6 B9 `! e! D% X3 s
回复 支持 反对

使用道具 举报

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 */* j* c: l4 `% o$ V9 Z$ c2 u- k5 G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* C9 R- r/ n7 Mvar heapMemParams = new HeapMem.Params();
; @& B* F5 n: R, j0 \1 S  wheapMemParams.size = 0x4000;
: }: Y$ H1 H) Y% M" w  d( X: ~" p! D* A9 e
var Memory = xdc.useModule('xdc.runtime.Memory');9 D, `6 n& Q& H' V8 |* ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% C! z1 P$ N5 e; x6 j/ @$ Q4 e/ E) W; k; H' W" a9 d! G; i5 g/ Z( P9 D9 Q
我大约calloc  每次共计大小为5K*16bits,8 [2 W: r% A! N+ J! C+ L9 p
而默认配置才0x4000、需要改大。& Z: k) X$ J+ {
- s- \9 K6 _2 M$ J
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* \) l* j/ K( w' UProgram.heap = 0;
* M# Z' o. ?# J% R' j+ {$ A: z" wProgram.argSize = 100;  /* minimum size */
9 _) s( f4 b9 x$ UProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-4 21:26 , Processed in 0.040784 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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