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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 r+ r% p$ u0 Q" T9 k5 X
  X& `6 m- `: h5 h' Y4 p% S- I# {    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
$ z( |. e( P' r4 V9 s3 T& j5 G6 T& Y7 {
其他程序段。。。。。  g3 g% Z& v. U2 [
) |* h0 p7 j6 Y& `1 [
   free(x_d);
6 u7 r  Y. y# D- @" w* D# j
# c! }$ T. s( w: h使用DSP侧单独调试功能,验证动态申请没有问题,1 Y0 O, Y2 I1 a9 O6 N% C( B! J

0 ?5 {; K& `; q- m# w8 Z但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
! l4 @! p, I- O) q& C( r# [. v
8 u: i9 @& v% }& h$ ~+ ?

' r- P3 l  Q2 ~) D$ r3 q; j+ m3 ^8 K4 }$ _2 C$ I2 U, X2 H
7 ^! O3 A, _, l- l+ Y# w
8 h' K4 g% v. h: n1 i$ m

, t- Q* T6 p1 y, ^  P# a
" k6 F8 \7 q# `& l! n$ L& u5 g, j' a
+ R9 @7 x7 z0 W( |4 s# v

7 m) I# P, r( @8 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明# t) P7 [; }/ O/ E2 }6 i$ Q
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& Z% r6 H; ]- h& b8 Y3 c(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 f7 V( J- i6 }2 {/ u( J
( }3 t- {+ o* ]4 ~8 z$ G
是不是需要在DSP.CFG中进行配置% ]& z; M0 t# @" G
我现在的配置为! {8 P7 r6 ]7 T* Z: M2 Y* `% Q
# y: g% B; D5 J5 y. H6 R
/*
/ d5 ?( a0 {3 N, G" Z+ p. T *  ======== Operating System Configuration ========
2 Z& C% z6 @: P* h$ R0 e( I */7 y% |) O6 i0 F. j& u4 o

. j8 C# x& w% P& B( m$ Z/* no rts heap */* g& A- N1 `  X0 M4 ~1 m
Program.heap = 0;- d. O- ]% p( P4 d( i  ?
Program.argSize = 100;  /* minimum size */
2 w! D* `' V/ C1 Z9 Q* G+ }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 |( d. P# R: m, S. G3 ]$ f) o$ v: z- ^
/* create a default heap */; a2 K4 E. I+ P, u: ?* {" K: R
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 r* |* i- S" T* ~
var heapMemParams = new HeapMem.Params();
' j, u+ b' m; u5 M* m3 EheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 O2 G$ y2 w1 v
, F$ y8 o% b/ d4 t
var Memory = xdc.useModule('xdc.runtime.Memory');. n% Y. Y4 y- V- g  }
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* a( |% U& k% x. _9 @! A- V5 s) f( [/ k! W  A2 f
/* configure System module */
# S# Q! X0 g+ f+ dvar SysMin = xdc.useModule('xdc.runtime.SysMin');
2 }: J! z; Q' U* [' {SysMin.bufSize = 0x1000;
' E" S  H, o3 bSysMin.flushAtExit = false;4 X7 W- N. v1 {( X# T) d7 {3 W

! t8 q1 b0 r- ~: {0 @var System = xdc.useModule('xdc.runtime.System');
! c  O8 `* e& k1 D' LSystem.SupportProxy = SysMin;
9 O" ]* ^) n5 m8 `/ n. f# p* i9 N& S$ p
/* configure SysBios to use the lower half of Timer 1 */1 R+ F. H- Z6 t$ Y+ O4 I, s
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 O1 [6 e& s* k0 ^var Clock = xdc.useModule('ti.sysbios.knl.Clock');
# V! n4 i  ?1 ]& R% w3 P$ j. YTimer.timerSettings[1].master = true;
+ k" Z% Q% N% g0 b+ Z! ?Timer.defaultHalf = Timer.Half_LOWER;0 @3 u0 U; P1 Y6 _6 C( L
Clock.timerId = 1;( u0 O) V+ ~# l/ v, M9 T

$ Q( ]! N' q* Z* h. T2 X7 S* {* m9 E$ ?0 k
/*
& \2 }2 w/ ^" o  M, j8 B3 |/ ] *  ======== Miscellaneous Configuration ========4 K  d' N7 r( H: Z/ |$ V/ `
*/! C' G9 j; ?) f

6 X1 N2 M# I9 ^* z$ v/* set default diags mask */
) w$ b" M3 J, s, A/ \2 |' M$ Qvar Diags = xdc.useModule('xdc.runtime.Diags');/ e! N* A2 b( r& H* m. X0 M$ F; M
var Defaults = xdc.useModule('xdc.runtime.Defaults');! D0 n" x9 u" ], y5 z* C" u
* A6 c; {6 |$ V8 Q2 _- J4 `
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 U/ a! t/ M% y4 q2 l
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% O& x* r- _; m8 m
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
4 {' _/ ]7 ~2 p0 J7 dDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
6 \! r( A  W% X3 A! E3 jDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */. b: Y1 j. h( n$ B3 s: x
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
5 z+ n: L. J9 F$ ADefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) h7 y. ?, V1 b3 E# Q: ~% M0 P
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
. h$ \/ x0 @" ^. v* CDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 m( H7 O) _" `; d. u2 l
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% \* |. D# ?# E
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) P$ W  n. q  l9 a# s3 @0 ?
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 S+ D" }* ~0 v2 m5 `! S* tDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;" ?  F7 l7 O3 T: p# g: @9 i
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ `$ m) [3 ?0 G$ o# k! R9 G* G% e, B
/* override diags mask for selected modules */
! N, @9 D" C/ e/ E9 P3 vxdc.useModule('xdc.runtime.Main');; P5 o& }1 J& \' N9 ^  m7 y
Diags.setMaskMeta(8 j) Q5 o2 z6 W# S2 q2 ]
    "xdc.runtime.Main",
1 p( T1 |2 G; K! D: b# {; {    Diags.ENTRY | Diags.EXIT | Diags.INFO,
$ Q0 S+ p! \, ^; v1 C5 X    Diags.RUNTIME_ON
$ G, I1 P1 W* `);7 Z& J( v( M, f8 o0 D9 ?' x

7 \7 x8 F/ s* F' Q1 M6 _  Cvar Registry = xdc.useModule('xdc.runtime.Registry');% ]# p8 l% k6 D3 Y) V$ F/ G
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 a3 \; ^/ P/ a* P- R1 [+ F! o
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
4 [# b" U# U! A" }! P$ T1 u6 ERegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;3 j( D; O2 l7 c' Q3 v& g3 M
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
& |* s$ A1 j! B6 v9 T0 T# D) ?! @4 a' h9 ^& O5 A
/* create a logger instance */
5 B  O" j) Q; Q5 c  X' h# f+ fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" r6 L1 i( X5 N+ P7 Mvar loggerBufP = new LoggerBuf.Params();
9 e2 m- W+ {; ]2 R! M* N1 AloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- q5 Z& z4 A, T; \loggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ ]  H2 Z' I6 a( h2 d" D4 K" J. h- L+ Z, Y% q
var appLogger = LoggerBuf.create(loggerBufP);
! D# i# u  k: }; vappLogger.instance.name = "AppLog_Core1";
0 d  ^; |0 K3 ~" eDefaults.common$.logger = appLogger;$ g$ }" }/ {7 [7 K$ D# p* A
Memory.defaultHeapSize = 0x8192;   
1 o7 m3 @* F! [& v* GIdle.idleFxns[0] = "&LEDStatus";
; b2 t% b5 h# x9 x& B$ J: LCache.initSize.l2Size = Cache.L2Size_32K;
, H) _+ s  d; m  C( N* l! O) P5 E- O9 J( R
回复 支持 反对

使用道具 举报

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 */
5 n- H" f4 P5 E% Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, B1 B6 L3 x" b/ k7 h5 Z, {var heapMemParams = new HeapMem.Params();
6 O1 D. K. @2 w3 d  q; y9 w. u' gheapMemParams.size = 0x4000;4 }2 @# P, c) t3 m* K5 I* }
4 k( X; P5 K& E; B5 h
var Memory = xdc.useModule('xdc.runtime.Memory');6 t% x9 y8 Q) H1 L6 e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- J5 d" L, O& W5 M
+ n5 F* F) c* f! e& C8 C3 U
我大约calloc  每次共计大小为5K*16bits,  {% {( O! D" b, R$ y) ?* C7 w, ]
而默认配置才0x4000、需要改大。
4 b: e! N. p8 X- A% P* _/ r
$ Z3 O8 u* q& w& n8 }2 O
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */! {3 K2 E7 v& F1 J) I
Program.heap = 0;
$ \' ?8 F" P& V" F/ {* A# {& BProgram.argSize = 100;  /* minimum size */
& c0 R3 Z8 j1 f$ X$ Z1 AProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-15 16:43 , Processed in 0.047444 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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