关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
' I. n! I- B+ u0 b$ X! ?; Z" E  |' v9 ^
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 f# p4 I+ y1 Y  Q
# m1 X1 Q; \: P! A% P, d; N
其他程序段。。。。。
0 K7 O" J0 R5 y- D; X' Q ) ^& l$ [, E, R5 Q
   free(x_d);
1 q. m7 d0 O' G# f8 Z! `  M$ ~% i; J+ R+ T  C5 c" [' P
使用DSP侧单独调试功能,验证动态申请没有问题,
$ Z1 o+ {- d" J  f$ K
' l7 v- s7 Y# o5 p- q& `/ N但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。" w$ k4 V3 n$ I3 P; N
, ^+ |( C+ R2 H. R

0 |$ k6 q, ?4 h! K
4 C: H! F" G# a1 {" I2 i/ F  z, _
- T' S) v" s! U
, L6 `/ W( ~. ]  }& H2 W
9 K$ M* r1 s* G4 h8 j$ G! S/ t& G! R" k7 G: ^1 D

2 q8 ~$ y  O9 \4 I& C( ^/ c0 q' {( u9 G/ P+ Q3 S

) s8 D1 E4 R2 W1 f, ?% {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* n: T( W; e" t4 d我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
4 [% I: {# f7 M( ^& b( h(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 O  R# h9 ^1 ?6 V
6 t+ e4 p) F+ S  b5 }
是不是需要在DSP.CFG中进行配置
: X9 g/ g/ }0 }; P: N; v我现在的配置为3 Z4 e5 x7 }0 b7 b0 Z* B4 L0 X6 ?

$ h) ^8 a2 _: Q/*
; _; P0 f$ R/ `! X" r2 k: g9 S *  ======== Operating System Configuration ========+ t; ~: U1 I  P
*/! \7 v) Y- B* n' m. q2 @( |. h# i
1 e6 T! s. m7 K1 E
/* no rts heap */8 U( ?* F  W5 V0 i! Z! U4 D
Program.heap = 0;4 M( t7 _- {* F; A5 u6 l
Program.argSize = 100;  /* minimum size */8 t% w; V7 X8 U, y- d. k, f
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* D- @8 d8 c1 M& M$ ~" E' K
+ U2 R, u8 j9 \6 a+ n8 z
/* create a default heap */4 e' k/ G" L& N: h8 L, h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- G, l5 t2 Q0 d8 R' a, O! Ivar heapMemParams = new HeapMem.Params();
& k% P/ y# k2 P1 u2 EheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
5 b/ J9 t* u' _5 \- ~" V
* Q, d% R5 S) a# x3 m  U
var Memory = xdc.useModule('xdc.runtime.Memory');
  R+ R5 a+ m* H( V# LMemory.defaultHeapInstance = HeapMem.create(heapMemParams);6 O3 s8 A& {5 z3 f( U
! o! Q  }( N! h! c% [
/* configure System module */
. E' M& [  X4 G, t$ a9 {2 b" Yvar SysMin = xdc.useModule('xdc.runtime.SysMin');
( x3 y0 T. v: l- f% wSysMin.bufSize = 0x1000;
& a2 l: J( R$ J% |- x& q8 R- O1 [SysMin.flushAtExit = false;
6 \. I2 A# \5 t  S+ ^! J6 E  O: t8 b; u% l  u& v9 F
var System = xdc.useModule('xdc.runtime.System');% l% i$ T. h" ?4 G2 G! U
System.SupportProxy = SysMin;
: [4 W: m% z1 X" ]- H) l2 k/ _8 z# _: w# F
/* configure SysBios to use the lower half of Timer 1 */8 w$ ^; Z/ e9 L3 |# T. a  ^
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 Q$ M. j, L& Y# Q' K( d2 N/ j! dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
9 m5 z5 n1 }6 s9 x6 M( Z' p+ l7 R2 NTimer.timerSettings[1].master = true;
& y4 v! W3 T+ }- b* DTimer.defaultHalf = Timer.Half_LOWER;: ~/ X* `  E8 W7 V) j
Clock.timerId = 1;5 Y) f& u4 L# ^) j

. j; Y5 {3 u9 O0 Q6 c
7 a: w) w. L6 e! y% h/*) R+ P3 b3 e1 m2 y" o7 d" L/ V5 l9 T6 q
*  ======== Miscellaneous Configuration ========
0 w. }" E' _4 F* ?) D1 R! x) b2 S */
/ E5 G( C; \+ k7 M. f
& G7 l% d9 s% z# h- v0 k/* set default diags mask */
7 g/ Q+ [  k! s) K6 J/ U4 T/ {var Diags = xdc.useModule('xdc.runtime.Diags');2 d. a2 ?8 P' Y( q7 Y( e
var Defaults = xdc.useModule('xdc.runtime.Defaults');
0 l8 r4 f6 T. R1 Q  ]  t$ [
4 s' o) V4 H' I8 J& tDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 o- K; W: ?$ EDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 ?6 w5 O* t* N6 zDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;, U" h2 e( O9 I" w2 B# G2 |
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  N( x5 u3 _6 {1 O: h2 o
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' G: J  C( Y) \  J8 G+ }- {Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 b5 H7 J) r) d- b' U$ G" F) L; UDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 K' R$ J/ r# \) r% K7 `Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 J' O8 k6 ]1 g0 r  vDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) m2 U+ _  c; }. t1 tDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;; y( _# N, A8 a. X+ Y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) r7 j! y, z# ~
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* W; P0 M$ Q$ o+ mDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
. i) R4 M- G4 G0 o$ J' b+ hDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
  a0 N9 t+ j, p* j! X1 b: H$ |6 i" d9 d, Q
/* override diags mask for selected modules */
4 S$ j& }& b/ \; l7 X8 X6 lxdc.useModule('xdc.runtime.Main');$ W& E9 t' @: r3 [4 F5 \% F
Diags.setMaskMeta(
" r! H9 P7 i1 Z5 ~) B, J    "xdc.runtime.Main",
7 b# m& [; Y$ L% i  o; ]    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( }: ?7 U1 E' K& w& j% \* t! p) ]    Diags.RUNTIME_ON: o9 H9 O/ i- S1 I. R" i' V
);9 S2 |; B6 b" t$ \/ H

) N0 V% ~8 U$ l9 _var Registry = xdc.useModule('xdc.runtime.Registry');* `$ z: v, j3 Z8 K4 o$ H
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& p5 c* f, a4 QRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# h' H  D9 R7 D) v% A7 P
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 U( v. L2 S& d- S% o" y- H# PRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 U5 y/ J( h, c: }1 Z# X" c" h) j0 T# n
/* create a logger instance */6 X; w2 x4 W6 I8 [
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
6 M1 [- Z. z+ w: E- ]* wvar loggerBufP = new LoggerBuf.Params();, `4 K6 i& ~) m8 i# s
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */5 ^' n: u$ f0 t4 j. j
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
( `* i; \1 u& w; `
% @# c0 u( V( O: Jvar appLogger = LoggerBuf.create(loggerBufP);
( k0 w6 o/ _9 P! Y7 _0 RappLogger.instance.name = "AppLog_Core1";5 ~4 i" Q& R4 i" t, `& K
Defaults.common$.logger = appLogger;
* r7 |9 D0 V: ]2 t) AMemory.defaultHeapSize = 0x8192;    + |+ e% h  A% s( T$ b6 ?; S/ s
Idle.idleFxns[0] = "&LEDStatus";& d9 A- ]. Q+ }' q7 M0 p2 @2 I
Cache.initSize.l2Size = Cache.L2Size_32K;7 g7 c+ i9 g  h/ n8 M- q& l
/ Y# Y; X4 f$ T) z3 B
回复 支持 反对

使用道具 举报

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 */
/ w( A8 N" g, |+ E& ?1 q+ F: bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% _# r+ k& g8 d  d( V
var heapMemParams = new HeapMem.Params();
; S! }' I/ z7 t' O$ @: PheapMemParams.size = 0x4000;% y7 @" d3 O  X0 e; U
! l! o' {' [3 S- \( Y2 ?5 o7 d+ `8 Q
var Memory = xdc.useModule('xdc.runtime.Memory');
+ q( U$ K7 I$ OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
) P! ^7 J, B- {2 J/ l: I# t/ v5 l, X  [7 f9 A- P
我大约calloc  每次共计大小为5K*16bits," `! v9 O" U7 G" |5 O; b! Y
而默认配置才0x4000、需要改大。
0 |; U5 t& E; k8 N3 L; a6 l, l3 j0 K2 {" J: }5 M( c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */& K/ J- n3 [& L9 @
Program.heap = 0;
; l* ~6 [3 a& v1 u5 H. eProgram.argSize = 100;  /* minimum size */
( m" [5 ^: q% J6 h$ p' eProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-31 12:51 , Processed in 0.040405 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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