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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ U3 c; S( m) o0 l. W$ d
0 N/ k' j* D, r$ g" ^* n$ C  S5 h( x$ F
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ e! J% Z0 `( @/ k  f* }8 X- c

% K' F- R8 r5 S% H: l3 z! g! I其他程序段。。。。。! |! s' f9 ?/ ~
- c: ~3 \. ^' ]
   free(x_d);
/ ?6 k' J% |' w8 N, w9 y/ }: _7 E
使用DSP侧单独调试功能,验证动态申请没有问题,1 o# q( Q) q, x  |, s, z
/ |- m6 k- w: _* V0 E6 g( i
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。/ D5 S6 d( n" c* x6 w) K. Z& {+ h/ A

+ v5 K' |) B" V' `' R3 W3 ^
! U9 Y( l1 y# x  E5 h5 S( M* J
$ }' ?' D9 {8 S: ]3 P9 Q: P( E
! O( B6 g' B7 m/ A
6 u: Y4 E8 `3 X6 b  O
' l9 _8 R* s; j% ^' N* f. A8 j9 M2 P  J/ A8 }& z

; M: A8 S+ S4 x/ _. `2 S: Y
5 S( P/ d. P# V, O( F) B+ X, H: h* x, b( t1 D. V" J9 w
分享到:  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 */
+ U# y, [& j7 g/ NProgram.heap = 0;3 P# `! x$ B0 h6 R3 M
Program.argSize = 100;  /* minimum size */* Y: ~! c$ S9 P9 ]
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */* h! i" a/ |( R# H# e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' ]8 q1 G5 l0 \- m4 G/ n
var heapMemParams = new HeapMem.Params();
( ^+ t5 C& O1 ]; {# d& oheapMemParams.size = 0x4000;9 d& }* K: E/ |1 M, u0 W: {

1 N8 @6 ]5 e# l1 ~8 }var Memory = xdc.useModule('xdc.runtime.Memory');
5 U& z$ n! p2 b5 K1 |+ X1 gMemory.defaultHeapInstance = HeapMem.create(heapMemParams);0 C) O( P4 j2 U  M$ _3 v$ C- C5 N

: D2 T8 X( I( D3 d) S- y/ y我大约calloc  每次共计大小为5K*16bits,, a0 x! r# X. P2 u0 c
而默认配置才0x4000、需要改大。: j: L# ]& g/ M/ E5 ^

8 B$ Z9 w) Q. y
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
, q0 {3 Q: c( ]! B- m% k2 [( W我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! U/ Y$ E: v8 n( E; ?- i- a2 q. M
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, O, H7 d0 q5 d; g! ~
- z7 a) X! z8 v: d& [
是不是需要在DSP.CFG中进行配置9 G. v- F9 a* N! D) y
我现在的配置为
2 |" K( p1 ]+ K3 ?' m9 q( x' t/ s& w; n- H' M" H. c% ?
/*6 [( f0 i/ K; v9 X, k2 w2 Z& h3 }% ^
*  ======== Operating System Configuration ========  o. {, ~8 U/ g0 _- S5 E
*/
! J- m" x: {4 o% {4 N4 |4 H2 u8 e& s2 e  u: w+ i
/* no rts heap */+ T9 P, e5 d* g" E5 x- C1 Z
Program.heap = 0;
; T( D) Y8 X  j- k( |6 dProgram.argSize = 100;  /* minimum size */
0 s- o/ F* z- b) G" U: W& sProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( L' q4 G0 y3 S1 M! B2 j% {0 F2 v. R1 Z: [, Z6 ?8 L' F  P) J
/* create a default heap */
5 o# N+ L5 R" s% L+ a; b5 @$ evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" N: [5 s; u# cvar heapMemParams = new HeapMem.Params();  @2 i# o, @1 N% a
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; b- R% h! J& j$ u* \7 Y) y& s8 n

- _& w& G% X# C0 [) F3 `
var Memory = xdc.useModule('xdc.runtime.Memory');: j5 V# r' ]% b. @6 x9 j* R8 u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 l( B- S3 m/ B3 E7 u7 F3 z, C! G) R7 A) s8 \% L' j
/* configure System module */
' ^3 W* p3 [$ Z8 ?$ l/ b  q8 X7 |1 Qvar SysMin = xdc.useModule('xdc.runtime.SysMin');
0 g7 c$ f" P+ |; RSysMin.bufSize = 0x1000;
" s7 H, h+ I6 _& wSysMin.flushAtExit = false;
" S3 M! p' n7 E' h
& p5 }6 j3 R) u8 @7 _7 K3 avar System = xdc.useModule('xdc.runtime.System');( Y# m1 S4 K" b! e# J  W
System.SupportProxy = SysMin;
2 i8 W% J. t  s, l& ?
7 B2 [+ U8 X7 d* \, D) i. Y5 Y. s/* configure SysBios to use the lower half of Timer 1 */
' n0 @/ G5 U6 ]0 Q+ R/ a# fvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 P; }/ ~/ R$ H- C
var Clock = xdc.useModule('ti.sysbios.knl.Clock');, w- {9 O0 w5 q
Timer.timerSettings[1].master = true;
/ {  m) @; J7 E) {9 _. ^Timer.defaultHalf = Timer.Half_LOWER;) g) g* a) N0 L2 w( A
Clock.timerId = 1;1 L1 A/ N6 U4 r. a0 |2 W0 b
& }; c! J6 X3 D4 J! Q6 _& m

2 J$ w3 z" `) Z+ M# [! @% P/*! S- s) r- s- y: m4 u( J
*  ======== Miscellaneous Configuration ========% \, r) E5 O2 g* z7 Q
*/8 n* i( X5 e. g
& Y. r! P" x5 G% f4 Z
/* set default diags mask */
9 i2 E* M+ i% i7 U0 tvar Diags = xdc.useModule('xdc.runtime.Diags');
7 h6 R2 ]' Z( R: k0 r/ F7 Vvar Defaults = xdc.useModule('xdc.runtime.Defaults');1 N6 `- w  e/ @$ f4 I& E" }

2 p# j, B" P2 q+ x: z7 `3 S$ cDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" t- F9 ^2 W, }* B7 G% V: iDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;* ~. l4 N9 l  E8 X4 O$ E" a
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: u+ r$ m" K* J- U6 ^4 Q+ `( l4 iDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  B* H/ M+ [$ x8 H% z7 i8 T
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 A: c, u- |$ |! \2 ]/ [; O+ m$ hDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; A) |0 @6 K' sDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- X& x" P  I) g5 |
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
) v9 @8 G$ Z2 o, g2 ~) VDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) G3 a! z1 `" Z1 i* S- b4 \Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;4 F% f5 F/ W. K9 U* B! B
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) ~% {) h# Z- h
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 w) a: ^3 N" e! T& N
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
4 z9 ~, f3 z- _' jDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 \. m3 _2 T$ E3 o# Z  G9 M3 T5 A, Y6 Z0 _8 K% S  y% g6 ^! E
/* override diags mask for selected modules */
, [0 k5 e( v) J( Y/ O6 V0 |/ Ixdc.useModule('xdc.runtime.Main');& x, V9 n! z7 B$ h# ?/ a
Diags.setMaskMeta(1 e) l6 Q1 a4 A# c+ g2 M$ h$ ]$ B
    "xdc.runtime.Main",4 Y* U1 K" O: c4 ?- W$ Q
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: P8 H& x6 I% ?0 b$ r7 K0 {    Diags.RUNTIME_ON
! e4 F3 \* m: B);
3 z0 h9 a0 w1 r3 Y  @3 B- T$ c8 X
var Registry = xdc.useModule('xdc.runtime.Registry');
& ~7 Y& ~& I( h' _) w. mRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* d* A9 w  e! T$ R9 G0 ~6 ^
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;; F. S( H0 i4 w+ B" D( i
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 m$ c  P% @5 H$ G2 N4 b& GRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  O/ D! a# y  R  Y# D
4 ~) K8 e- G, x# J3 S5 n/* create a logger instance */. o$ ^7 y' B" Q3 p8 x; S
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ a; [8 [- Y* F" ]9 {8 i0 Qvar loggerBufP = new LoggerBuf.Params();# \2 K1 A+ v9 o; @) Z' Q" h7 ]& }
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
+ e2 Z1 e7 `% J0 b, O1 r# kloggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ G7 J1 ~) L& E' A* j" u4 H* i# x& C/ B# R3 J& E* V- s; p
var appLogger = LoggerBuf.create(loggerBufP);
. T3 b* ~$ P7 Z9 h' ]4 @: xappLogger.instance.name = "AppLog_Core1";3 d8 d. |. @  y1 W
Defaults.common$.logger = appLogger;7 f& W. X( N; w3 ]
Memory.defaultHeapSize = 0x8192;   
+ h, h6 C; W% R% @; DIdle.idleFxns[0] = "&LEDStatus";9 S/ h7 u$ }" D+ v
Cache.initSize.l2Size = Cache.L2Size_32K;
: O! W; F. ^0 t. o
$ q& [& v8 Q2 b" ]0 [( Z* Z+ C
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-29 10:53 , Processed in 0.045063 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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