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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 F2 ^  E( t3 k# t( q, C
6 ]) z6 z; V5 v, O7 F: t0 Y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; ]5 e! u- Z# F! T7 q! |4 m

( p6 d, e1 j8 W  s4 y其他程序段。。。。。1 R9 p5 `. ]7 o
( d! {( J4 ~0 Q/ B5 N
   free(x_d);4 I9 Q! J2 f0 [5 K. Q' M8 W
& a9 ~3 j  j4 R: Y0 D' c  M7 u
使用DSP侧单独调试功能,验证动态申请没有问题,
% C/ E/ r4 o* m7 {, @
" N) M9 I/ F; E9 E& ]但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' w( A: P9 v9 v4 R4 y; x6 c) K

" w8 r( k% g" R. M* r) C# q
! U0 E( Y9 r. G' B0 P4 ~, b% U* `( h
3 x4 ]1 O0 Q; k6 ]; p
2 |# D- Q4 @8 Y& M3 T$ i& m

: M0 H, b6 g- P; X. k) b* r: e
- g  B/ z4 B. s& z9 \
0 x4 T: \$ z8 M( y$ a6 [: ]" \' s

: K& U5 t1 j  \8 G5 \
分享到:  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 */
/ e% q$ |# t- O% n- bProgram.heap = 0;
- Y8 |+ R6 p9 S* XProgram.argSize = 100;  /* minimum size */+ O, X# g, M; c, v0 ~! N6 ]
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
5 d% o7 A  O% y* [5 {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 D( T6 X) s$ v6 E9 _1 l
var heapMemParams = new HeapMem.Params();
2 C7 g$ V" ^- r1 a9 N/ o% rheapMemParams.size = 0x4000;
# [6 m5 i: a( d4 k' O
1 |4 _; w8 \8 H5 T4 m. @& Xvar Memory = xdc.useModule('xdc.runtime.Memory');9 Q" V  w! M* e0 `: n' H
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& c) Z1 z) U3 v0 c9 s

$ r! G( l: g' p2 m( _& X# j$ n" z我大约calloc  每次共计大小为5K*16bits,2 q2 |/ Z8 [* M, L. n
而默认配置才0x4000、需要改大。6 ^: i( k/ P) j4 a$ O' q- B5 D( s

% r" k9 i' y& u# [5 \1 H7 @
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
+ Z7 u9 A$ q6 w2 g. l4 p' H) i- d我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& Z7 A3 m( V  T9 h; l+ r# d9 K(不过疑惑的是,为何单独DSP仿真就没有问题呢?)3 B$ T# M) j8 T4 c' V

9 g! i- D9 `0 ]3 m# _& b是不是需要在DSP.CFG中进行配置# ^5 r: G8 E  ]. I/ p6 y6 F: P1 }" g
我现在的配置为
" E4 k: j! d7 Z" j7 T) P3 ~8 D
/*- i; v$ F) |: C2 I. o2 d2 S
*  ======== Operating System Configuration ========* ?! N, P* @8 d6 F' r" w' l
*/- u- c* p) p1 K! k. H( u
5 [% u2 m, D, e) M9 ~
/* no rts heap */2 |, |( u  E4 S. k
Program.heap = 0;, W2 D- b8 u1 j( r' F
Program.argSize = 100;  /* minimum size */4 u( O  c' P3 h+ V
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: O" v- k- n9 ~+ d, R/ t2 `
% `$ h* }8 {+ `) R% S, K/* create a default heap */, V; A. B4 ^2 y0 Y% v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 ^+ y! H7 K4 t# v# wvar heapMemParams = new HeapMem.Params();2 G1 e- S- Y7 z
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: K" U  E4 |- B7 G$ y) w
& e7 I# K' F- Q& W* K
var Memory = xdc.useModule('xdc.runtime.Memory');
7 |' X/ {: S4 f- t( rMemory.defaultHeapInstance = HeapMem.create(heapMemParams);6 r; c4 M9 F3 V; l
- n* b/ C; t4 J( k4 ^$ [2 U
/* configure System module */- u- }" D6 n' D0 j( j" H* N1 Z
var SysMin = xdc.useModule('xdc.runtime.SysMin');
( V5 E' k1 }$ R7 ^) USysMin.bufSize = 0x1000;* F- A- U2 x. A4 w# M( e' i
SysMin.flushAtExit = false;
! G/ x1 v7 _0 C9 Z$ G9 f6 c0 J- d; x. a& n& G# F' z9 [
var System = xdc.useModule('xdc.runtime.System');
3 O4 [! o; V* S, rSystem.SupportProxy = SysMin;
9 ~) {8 d7 c) ?. Q5 o
! F: U) A: d  ?  k4 y' v4 e/* configure SysBios to use the lower half of Timer 1 */) N8 D! J# o; f$ V! e' ], X/ d7 {* B
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( B1 s$ l* @- U1 L) w' s
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ C6 Y5 Z4 o$ v. KTimer.timerSettings[1].master = true;
; U: ?/ G( c3 e$ R% \Timer.defaultHalf = Timer.Half_LOWER;
  {, E$ p# e  g- a- ^8 [/ @8 l+ R; PClock.timerId = 1;) D, A" Q) k! J1 T$ Z$ t

: k! t" [6 m( D
) f5 P, {' w: J9 u2 `/*+ n/ z$ K- B' ?$ p/ R6 F' u9 o
*  ======== Miscellaneous Configuration ========
% x' Y9 i" I: C* L% V* p) r2 x  M */
" G" G5 D, V0 D6 }
0 T; i: m8 V5 G( m4 p/* set default diags mask */
  D! H) q/ H/ x% }, ]var Diags = xdc.useModule('xdc.runtime.Diags');
, M" S1 \! x- B+ s2 {- Pvar Defaults = xdc.useModule('xdc.runtime.Defaults');
5 P) ^: N( N5 M2 d1 w" P8 j
1 N; I( F/ |' Y# n( ODefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 U+ ?0 }' X, q0 H7 J* |Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, f8 ?& V  N" s1 V5 t7 U
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
2 u5 d6 J3 u9 k& |9 PDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
9 @$ @: W6 J+ F( cDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
1 ]: d. V  e1 e2 S+ A+ c: BDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ _* N6 U* Q/ ~" N7 }
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ H) k4 O+ D4 F8 D+ _# E
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; Y; N9 z9 E8 x+ UDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;% C) G/ f$ V6 z3 Q+ A& S( K, H, n) F
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 V; ?+ H/ p" ?. ~; [+ c
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;3 \3 M0 k, ]% Z* D; u
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- f& A% u1 M1 X9 \# g
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( p; k9 ~! k  _, j( P. d9 m3 j
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;. V9 s0 y$ p! P; ?1 X+ x
6 h0 q5 v. l" {3 P: e
/* override diags mask for selected modules */5 Y- t3 g8 p1 x8 G1 t2 z% ^
xdc.useModule('xdc.runtime.Main');8 _, A$ Q3 O1 f' j
Diags.setMaskMeta(: j3 j; v1 h( ~0 |& j: b& Y& u/ V7 K
    "xdc.runtime.Main",
6 y8 g: N: B' S+ B. h4 ^# n    Diags.ENTRY | Diags.EXIT | Diags.INFO,
! ^3 d. m0 ^" H! x    Diags.RUNTIME_ON4 a- |* X9 W& d# `( H( N7 `
);3 {$ F7 D# e8 H2 U" k3 U

3 S, B8 ~, u2 p) _# W2 D* dvar Registry = xdc.useModule('xdc.runtime.Registry');( S* C4 x; k' _  a. Y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;1 w; Z1 F! H( s6 k; x
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
. d$ B2 S2 `/ l2 m  HRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;, f( h8 \, Z$ I! J6 V# t
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;: m7 ]- T' `# D9 r! E; p
$ P2 j9 `8 {0 `. l- C
/* create a logger instance */
9 G. U! P4 f. ?- c: c2 yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( ?% v4 R% x  K, M* n6 q
var loggerBufP = new LoggerBuf.Params();9 `+ M7 `/ o6 U; O/ \# E
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% f1 \- B7 |/ O$ s* g% H) W
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ G' W# k* r2 Q) |
, a" B% J* e6 t% b: v! |var appLogger = LoggerBuf.create(loggerBufP);
" |; a* r( f/ @* i4 b$ b: |" YappLogger.instance.name = "AppLog_Core1";
, S+ o' ]& y* u8 h6 I+ P6 x, vDefaults.common$.logger = appLogger;
& c+ z6 p. [  b( l: |( m! DMemory.defaultHeapSize = 0x8192;   
5 r/ U& Z9 c: T2 DIdle.idleFxns[0] = "&LEDStatus";
" C( s4 ]9 G4 YCache.initSize.l2Size = Cache.L2Size_32K;
- {% W2 |+ I+ n+ A; _& f, _' c/ k0 r* N: `+ H/ k9 d
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-7 19:55 , Processed in 0.043137 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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