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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ M/ K9 M4 C9 A) X) h, s; F. s/ u& j9 ?- T) c+ `
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2569 j: [3 O) @! X) ^( U7 b& U2 U5 v: y

, |! E% Y7 n! G7 a% n* Q其他程序段。。。。。
4 W: C* m2 X: {5 { 6 _8 u2 W  m* L
   free(x_d);
7 ?) m+ P3 l! p2 d! u) L/ }4 I, w/ V/ Q' u( O! V
使用DSP侧单独调试功能,验证动态申请没有问题,* K( G! N0 o+ Z* [

5 a7 Z1 B7 ]+ c1 s! L但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
; f8 Q5 w) Z1 l
; |; m) x, {* a9 j

$ r+ r7 X0 u: a
; s5 t+ V/ z9 g5 i  E1 j# B/ m8 A& Z. U: i) i

$ O2 H, b6 Z( K1 l+ M& W' @$ J; d5 a3 v  ?. P% w0 D. {0 r
( g* x8 N3 I* [; r

) _6 u( y$ i6 w! K
) p( b" c- A& C! B
: ]8 g5 c$ e1 }  w, y5 G9 Y  L3 h* z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  F+ i7 F8 ^9 n+ u+ ]) Q
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 o6 C- b! }; U  Z/ C1 o# e
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)5 d$ `8 H! \* M5 c, D6 O8 b

5 x: f  l; y" ?5 w7 Q( z是不是需要在DSP.CFG中进行配置1 G5 s. x- b# p1 [2 Z! K
我现在的配置为' W$ c( h3 l* P+ p5 T" }

4 [- Q+ G1 r5 G; O/*2 Z8 M, g. |7 T
*  ======== Operating System Configuration ========& p$ `! O8 ~( C. e8 s8 ]
*/
, H: G- b1 T+ d0 r6 T/ R1 ~. N5 N% y8 G9 O' B
/* no rts heap */
  `4 ]8 l8 t! E& T0 aProgram.heap = 0;3 W- i; i7 u2 K* a
Program.argSize = 100;  /* minimum size */
2 _! O% E) B# W1 CProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, b$ o! v( A- {* o5 d
  g) W' N: h& |( \# D0 T1 l7 D9 c( b/* create a default heap */
6 D; p; O' @0 `1 E; G' v' fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& P+ ]/ \' ^6 rvar heapMemParams = new HeapMem.Params();) G4 \: z) G3 a+ i
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: Y3 P! t! f' s& U) ]& l  D4 `5 L) F' R! U+ [
var Memory = xdc.useModule('xdc.runtime.Memory');4 ~2 w6 r2 r! q, [( e) T% d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 o6 G# U; Z5 j6 e/ ]

9 w' O7 m: K% m/ m8 i+ x0 ]/* configure System module */
4 S+ C. T! J9 p+ G( jvar SysMin = xdc.useModule('xdc.runtime.SysMin');
. Y9 z4 G! u5 X& |5 t/ z, lSysMin.bufSize = 0x1000;
+ E+ u+ Y8 @" a# S3 m" bSysMin.flushAtExit = false;
" H3 o; P) H3 l$ O1 Y( _: d- X/ @% f& @; j$ k$ E8 d. J$ `9 N1 B
var System = xdc.useModule('xdc.runtime.System');
2 l% A6 n- |4 v! e1 z# ?. eSystem.SupportProxy = SysMin;5 @% r7 V/ Z0 R5 _: ~
6 S4 w1 a& ^% r6 @, o
/* configure SysBios to use the lower half of Timer 1 */) W9 n% z1 v# W" ]( E" o
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 Z1 N' B9 N  N: ]" f8 Svar Clock = xdc.useModule('ti.sysbios.knl.Clock');. L2 {+ I( m4 u9 k1 O9 Z2 E
Timer.timerSettings[1].master = true;
, |. q: I( x! a) N+ Y7 U) s% q& J; cTimer.defaultHalf = Timer.Half_LOWER;
) }1 `% X+ e' N, T! d) \2 y) nClock.timerId = 1;
# v) H: _1 @# h4 i4 p
# i+ l8 e2 a1 v3 `
9 w1 k) j9 \2 g/*- h, m2 J( y+ x  G( d  A2 {
*  ======== Miscellaneous Configuration ========
* H+ k! U) }( H */' D0 |4 b3 X! \/ c2 V

! C0 A0 C- z0 ~8 i% E6 J/* set default diags mask */# E1 I1 y1 |" s/ |1 P$ r- H8 M8 }, a
var Diags = xdc.useModule('xdc.runtime.Diags');3 A) U  q! T; W6 o1 L
var Defaults = xdc.useModule('xdc.runtime.Defaults');6 G* I3 w* c3 p* b8 V

0 s9 y# k: h$ P8 _9 q4 qDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" W* ~' C( q7 O" lDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
' H* l' G0 {4 z7 Z! DDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 n) S0 d9 S8 g( v
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */5 D* T! t) _7 r( u$ x
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; S& X- l$ y  _) l! ADefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% x' }* J- j0 n/ \
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 e$ G5 b2 a8 V- T+ [Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 H% r* c; c3 K% R
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
- W; F$ i& h# g. j: uDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& @' ?! M, ^# j0 D# H0 `# A3 uDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
/ K/ P5 m& V9 \2 g. g8 y7 RDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; _# h- k( ?5 W9 n
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 R- K- h4 |4 pDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ g$ _4 P5 c$ W$ \0 v1 x
9 G8 e8 F: _0 A2 B6 }5 [- y
/* override diags mask for selected modules */
: f& Z5 H" m9 a' ?" U' C) Wxdc.useModule('xdc.runtime.Main');
' T, |' [2 l: z/ z4 N  `  E9 hDiags.setMaskMeta(
9 A4 \- N4 p+ e6 ?- Y: D' z    "xdc.runtime.Main",
4 k. I5 ^) c' x( e& _+ g    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ L: q7 d# P0 Q. T* s
    Diags.RUNTIME_ON
- g5 C; }' Z( t. t; g);
( P. s4 J! q8 K, ^3 l
" z1 U  W5 f! i2 e! \. I& h. Rvar Registry = xdc.useModule('xdc.runtime.Registry');4 V# n4 j; V2 P" G1 c+ \
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  I5 c& l& E" Y* H, l
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 [; P, N$ `. S! F
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* d8 T6 i; ?* w9 XRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 d& g* U" |5 g" A$ h* r( z" i
! L8 n5 [0 B! Z  Z
/* create a logger instance */2 g$ B7 X; E; X6 P+ K! C, D
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ ?5 K6 \; c4 q/ @var loggerBufP = new LoggerBuf.Params();* J- g# }/ c2 m- B
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 O" V2 w4 Z' f0 rloggerBufP.bufType = LoggerBuf.BufType_FIXED;" p/ y* w4 V3 v2 p

2 ^  A4 l7 }0 \  y" r/ ]var appLogger = LoggerBuf.create(loggerBufP);
) _  U9 B+ O% t! NappLogger.instance.name = "AppLog_Core1";
: ^4 M& S- A9 V1 ]# K5 CDefaults.common$.logger = appLogger;8 K& S' e! W6 m$ z& q: b
Memory.defaultHeapSize = 0x8192;   
1 e5 ~0 J* P/ ]6 @Idle.idleFxns[0] = "&LEDStatus";9 r, O3 E6 n# \% i7 N/ q
Cache.initSize.l2Size = Cache.L2Size_32K;9 @# F: K0 Z2 _% o  [

: t: U' N- x) F* z$ Y
回复 支持 反对

使用道具 举报

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 */# ?: f6 }0 e2 L/ n9 q( d
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% s% f& ]! k, G3 M
var heapMemParams = new HeapMem.Params();3 v) z) Y4 e, x. ^) W3 I
heapMemParams.size = 0x4000;+ u  \' O3 h+ [2 g
  `" Y& |- t' ]2 S0 k
var Memory = xdc.useModule('xdc.runtime.Memory');- d$ m3 y) K* @  m2 _. W  {
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) |' {& R4 a6 L( k! }5 \

' U$ p& F2 E. n/ b我大约calloc  每次共计大小为5K*16bits,' b0 e9 `' c: U
而默认配置才0x4000、需要改大。
- V/ s3 w' B0 `0 V  y+ x
9 E* n$ f4 V  F5 T" N/ m
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 ~2 I2 E# b% a4 M) c2 S
Program.heap = 0;9 K% H2 a  r$ `$ x% J
Program.argSize = 100;  /* minimum size */6 l- |) `* R0 F' X+ R2 _7 L
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-14 14:30 , Processed in 0.040849 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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