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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构8 I2 S" m7 M$ a( \, s3 p

5 R/ W0 p6 @( i8 p- g! J0 w    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. L8 b1 ], d8 o/ ]0 s5 x5 X; _; D) r: F5 u
其他程序段。。。。。
, `/ y) Y+ d8 C. U9 ~3 ?% C
( \  F4 l5 }3 Z: g  h8 |   free(x_d);7 m7 [6 e* q) ^$ S' w2 V9 i! i
' G$ @0 B, s9 {& p' O0 j+ n
使用DSP侧单独调试功能,验证动态申请没有问题,
, e: I5 Z/ j% T( H
$ C8 j4 v+ ^$ V/ _+ H但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
" N) [( v( y' K5 |0 E

4 I6 \$ @* o' c+ ?4 K0 c7 _" }4 i0 V$ e9 `
0 r* j* c2 y% w2 r+ ]  a$ H

9 `4 `4 e  e. A
4 b: p* @( k* k' O
$ b7 q% h0 p% w/ z1 z) d5 g& i/ ?
7 x3 J$ V! F% t- h( E4 \9 U

  ~. a# a" Q# G& E0 o  X* W( I% c# M: R9 ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明/ W! @( Z8 T+ X# r
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ p5 w. g( o# P: f% j* I(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 Q) C8 f# ^" v  H: b
% z0 [$ Y( S% V6 |
是不是需要在DSP.CFG中进行配置
6 z$ m' g& N' O! J! w0 W我现在的配置为
# R% ~( [6 B1 r8 q3 j/ C2 A' w  l" r; E
/*
# I2 K( U0 {3 q *  ======== Operating System Configuration ========* ~0 `( Q5 W/ ]
*/. ]% p& c( C, A3 r4 C7 W8 k
: d- i1 x- x, a  l
/* no rts heap */
$ l1 L5 B3 F  ~+ |+ Y9 h  L! cProgram.heap = 0;9 j; R! S6 V9 f6 [
Program.argSize = 100;  /* minimum size */
: a% U# x4 D. Z5 xProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
* L5 t9 a% S) ?9 A* Z2 v$ A! M! S
/* create a default heap */
+ X1 Y; D, r  i5 p4 kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, L. j& z! |" z' J
var heapMemParams = new HeapMem.Params();
: `$ ~7 ^) z! A6 q7 zheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 m9 B* i' H8 C" e$ P1 r8 I8 y
5 t: g9 q4 v% F, v( h( e
var Memory = xdc.useModule('xdc.runtime.Memory');
2 h* ]6 y' K: m* I/ z: G3 }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 a  I4 ^0 ]+ `: N! ]% J) E2 H& B6 g* s8 L/ z. D+ F
/* configure System module */' s) s* D; \% i
var SysMin = xdc.useModule('xdc.runtime.SysMin');: W+ {7 n+ G* z& ?- d( q6 K/ `: b
SysMin.bufSize = 0x1000;, Q. @% m' }; J" U
SysMin.flushAtExit = false;
1 R. L% }. f& i( m' x+ B
' y5 [- B! z  Svar System = xdc.useModule('xdc.runtime.System');
" G, z4 b# L* |5 B, @& O; iSystem.SupportProxy = SysMin;
# z6 [0 Z# m5 V+ n. A
# O( k6 }6 l+ F! y! Q  O$ C2 A8 ^/* configure SysBios to use the lower half of Timer 1 */
0 ^- j: y, g* m4 T4 o" X1 bvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# P" Y2 ~4 N7 l) H9 jvar Clock = xdc.useModule('ti.sysbios.knl.Clock');- L! M$ C% E. Y& d" u' F
Timer.timerSettings[1].master = true;8 q7 d* C% L/ C1 S/ O( C
Timer.defaultHalf = Timer.Half_LOWER;* _! K& |  z) r0 d" D% g0 Y6 Q
Clock.timerId = 1;
" N. C* b% H/ Z2 [
! j6 ^$ K2 ~8 ?( J1 A: y: h& k3 Y& ^
/*
1 T6 f4 b" a* s* k6 X" w. ^ *  ======== Miscellaneous Configuration ========, E) A; j0 f7 R" U) Z) U$ M+ J4 m
*/
3 Z% K& D& ~7 x% C" H$ `+ W: d! x% I7 q: Y
/* set default diags mask */
; O8 m; J4 }( i7 Pvar Diags = xdc.useModule('xdc.runtime.Diags');6 E& z# j( q/ f9 W& D* e# c
var Defaults = xdc.useModule('xdc.runtime.Defaults');
0 P6 {+ W5 ^  E4 X9 T4 N9 ?1 u4 O! P" n7 S5 s
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) v" N# i" L2 Y! QDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 Q* u  g# V+ y$ F' V4 F; {
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
" q( w* ^7 l0 TDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
" v: a- F; M5 D+ @Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# ]! V3 D* t, Y& ^
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; R2 L  n2 b! i9 c# t- T: f% CDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
$ V4 @# a* x) g: C- A  oDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 |: }' a# n, b6 M' d/ l. N; g4 k2 w
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# |' m3 C. T( a$ |/ {* s: o' |Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
2 G8 V2 O4 k6 {9 v6 `Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. B7 t. h% R2 L# B5 J( o0 X
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;4 ?3 k! b; {& {& a
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;" ?* U6 a7 G0 q5 b% C5 Y( c
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 h. J9 m( M. D9 V/ U2 {. f: I
! d# h# |; |/ a) I/* override diags mask for selected modules */
7 T3 B+ u3 M; ~# jxdc.useModule('xdc.runtime.Main');
  H" B' M9 s; v) s9 ]9 A2 ]Diags.setMaskMeta(% b. t* e/ x& |- t  A2 U- i4 l& @
    "xdc.runtime.Main",
4 g8 s* t2 S: Q. @. [, ~    Diags.ENTRY | Diags.EXIT | Diags.INFO,
4 e2 l2 Q/ E: P& }1 m0 f    Diags.RUNTIME_ON1 I2 t4 @: W9 L: S$ u1 O+ ?
);; Z7 h% ^; G) t: P
( [5 U8 v0 }% |! ~
var Registry = xdc.useModule('xdc.runtime.Registry');, E! n; c# s0 e7 X3 Y& _. d- U" d
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
* a( Z% Y8 E/ }& l4 j7 eRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 ~: |. s* Y7 G3 o3 qRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;% a, u# q0 s8 B) V2 v% N: P
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 t% w: C& U7 t7 X% ~0 J& N
5 B% I2 \* b. r! }, J  ?7 a
/* create a logger instance */
% j9 @6 C) L3 N4 Jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, Y2 M, F: E8 ~! i( Uvar loggerBufP = new LoggerBuf.Params();" W, W6 s# w* z: o- ^
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* w* N! C' f+ H- cloggerBufP.bufType = LoggerBuf.BufType_FIXED;0 R' ?, A$ A! v% E/ l$ G8 a: a
! `* o" V1 \0 t9 f+ G! `* x
var appLogger = LoggerBuf.create(loggerBufP);
1 ]3 H5 m  D1 K( I5 ^) S# q4 fappLogger.instance.name = "AppLog_Core1";5 v% }' x- }- Q6 {( W! C4 s3 v
Defaults.common$.logger = appLogger;
+ ^0 M' ]! }  `8 ^1 m$ G  ZMemory.defaultHeapSize = 0x8192;   
0 i1 O9 Z0 V- ?Idle.idleFxns[0] = "&LEDStatus";% c8 E& X% \' B' O9 f" F
Cache.initSize.l2Size = Cache.L2Size_32K;
- l9 P: R, A- Z+ [6 X2 {# i: ?' h; V% t
回复 支持 反对

使用道具 举报

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 */2 j1 t" e% U6 S; a' P. T" x' Y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ K8 e8 W7 m5 K/ F& Z! y$ a/ p* I0 W, `
var heapMemParams = new HeapMem.Params();* a( v6 {, i* m) F: [5 P( i$ g
heapMemParams.size = 0x4000;! h7 D" w" B# O$ {* g4 F
* Y, J( ]# @( _; v
var Memory = xdc.useModule('xdc.runtime.Memory');/ E, e: i' k0 W$ K; j+ o( ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! q; P' O+ I3 v: y9 c& s! @8 B# d. ^( U* @5 ^5 @1 ], f
我大约calloc  每次共计大小为5K*16bits,
( T5 _9 z3 _1 b3 |( s( D而默认配置才0x4000、需要改大。
* }6 J) U; j# f* K* ^; C
( ?2 c+ A, b6 c& s; l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. M7 Z# E) J; b' J* @
Program.heap = 0;
) G8 f( T. @6 e5 V1 YProgram.argSize = 100;  /* minimum size */) r8 n' }2 s+ Z7 ~
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-24 21:43 , Processed in 0.048598 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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