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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

* \/ y4 Z& N* E& C    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 M5 r, h2 V  S
' ]7 w! F4 z3 t7 X$ A
其他程序段。。。。。" S9 U" b9 z3 c. y# i% A
. P0 k2 K" O. e5 @
   free(x_d);& b% I9 `8 H0 z
7 O; l/ W3 ?+ q: T! ^
使用DSP侧单独调试功能,验证动态申请没有问题,0 I5 w' j/ F- K! Q3 }

$ j# u; t" S4 S# K但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
: r2 Q" \6 [. d1 a  [7 A& z. _3 D7 j+ ~
, r0 V6 i) ]0 P+ z' A) f

& \' ^& h6 b+ A/ O  s  E
. j6 G+ J" u1 O" O  b* X3 h  X  G2 k( X; W

1 ?8 s/ ^. V. |; Z/ o: ~: j8 |- t5 ^4 ~7 U) P
" k- ^7 {5 ]+ _" B
1 }0 z+ |' |. V  N' }

& O: T" Q/ D' r0 L$ e5 V$ L; F4 f0 I/ v, p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明7 Z. Y) I3 ^, ?$ Z2 u
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
6 M6 G# \5 V$ h. J( `0 p(不过疑惑的是,为何单独DSP仿真就没有问题呢?)! p1 {# Y5 G  O) B3 s3 b

8 ^* ~( @# w0 V+ c是不是需要在DSP.CFG中进行配置
( B# }; K; B9 e; h* z3 [" q2 L我现在的配置为$ a' |# A7 l4 ], s
* i  w. w/ x& C0 E% F
/*: f/ e. v7 H  I/ \& z) ?
*  ======== Operating System Configuration ========
2 x/ q3 `$ ]* l% }- P! k  r */
& c: v/ w' [' `  u, h9 }4 P
7 ]7 Q& u8 R1 O7 `1 D3 D- B! n/* no rts heap */
/ n' \4 r& p; U! k/ P/ Y2 `Program.heap = 0;
& M$ O. S9 R' ]Program.argSize = 100;  /* minimum size */
; z' K% g; u% j9 Y3 HProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, m& q3 j' o2 h/ s+ b! B5 B9 L) Z9 r) g9 T  f6 y) W/ W% C8 E7 O
/* create a default heap */0 H; ~7 ]+ h) G( |* ^) R/ s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" n+ z( q7 W4 q7 f" `var heapMemParams = new HeapMem.Params();
2 T& `' G( [  z8 uheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ Y9 ^0 ], ]) I0 Y: I  e6 n
, @6 l6 G$ j8 H  i8 h+ w9 H$ j/ J
var Memory = xdc.useModule('xdc.runtime.Memory');, U4 x+ F! J' \+ x4 }- g$ d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 Z  t, ~7 N7 T& ~6 ]# C4 G. a
4 {4 k% s) R4 [
/* configure System module */3 e3 l0 I8 Z" {
var SysMin = xdc.useModule('xdc.runtime.SysMin');
! d& y- p* J0 w+ F9 eSysMin.bufSize = 0x1000;* I! o# }3 N" g3 N+ j2 i  T
SysMin.flushAtExit = false;
6 R+ x5 K" @& Z& t4 y; k% D+ B8 ^+ a6 }4 z/ X, S
var System = xdc.useModule('xdc.runtime.System');& q. d; d+ i; s0 Q
System.SupportProxy = SysMin;* [1 K% Z) c9 u0 j- q
& Y8 a( A0 l: V* _' T
/* configure SysBios to use the lower half of Timer 1 */
2 |7 T+ Q/ @1 i4 avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. m' F) S( W3 C8 K, j' gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
, |& B( `( E. [# u2 i! n4 nTimer.timerSettings[1].master = true;0 _3 A* q$ H: q% u1 V
Timer.defaultHalf = Timer.Half_LOWER;
7 C7 e; @8 n  SClock.timerId = 1;
% R5 D1 d( S& b) K; A9 E3 d0 v' F$ Y
. m9 b5 \8 ]* A4 G8 ?# `0 N% G
/*0 b! O. K- I0 E2 R# z& l9 T: H
*  ======== Miscellaneous Configuration ========
) }+ x5 C. q6 o6 u7 M */
% R8 ^) |; O% V
* i& p2 [* c; q) D/* set default diags mask */
( k" ^: g. m+ F4 M! w; E' {3 ]var Diags = xdc.useModule('xdc.runtime.Diags');& s3 X7 e) t+ B2 H
var Defaults = xdc.useModule('xdc.runtime.Defaults');4 `6 D. v& `) n9 ^: Q8 N5 _' {
5 t2 W0 `. v9 e% g
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;0 \- ~! E0 u. d: l3 d
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  p+ c2 j* z% `0 ODefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
( u/ w; F# e5 T6 O4 ~Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( K# N# m* e  x& U8 B" I. [
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */: }/ N' {: D, y: N2 H
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;; h0 ^- b+ b! v" J
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, T7 u& n4 k4 ^; g& x' ]" l
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 ^. C9 P& S) s- u+ l1 O
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: N, @9 Q3 W" k2 e8 P# P
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;# m0 V6 J$ Z; p9 U$ N
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. Z2 E. K- h/ S/ V2 h
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 g& c! n. N' R6 {Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 ^1 i  y/ M! G* D  T( [% MDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% t8 R- ~  |- Q
: X1 K0 `* D3 X+ g
/* override diags mask for selected modules */
3 ]$ j) j) H: F9 cxdc.useModule('xdc.runtime.Main');
( v1 P6 |5 {4 D" D1 s; b5 j) v' ?Diags.setMaskMeta(  e9 a& P8 ?% T! w6 a
    "xdc.runtime.Main",
1 u' r; I+ R& d& H    Diags.ENTRY | Diags.EXIT | Diags.INFO,
; }& c) \* s- y    Diags.RUNTIME_ON+ V2 m/ C# R0 \1 s8 k5 c
);1 _7 O4 G2 q# Q

& q3 h! \" N! t/ H4 X' Ivar Registry = xdc.useModule('xdc.runtime.Registry');
; l7 v9 {4 d9 g) s, `Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 z" @$ U: u8 q$ D6 q. V
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* z2 n6 D+ w0 Y* [Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;) O! v# ^( J! X
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 u3 Q8 X: Z" p# v+ G' a

7 Y  s7 l1 @0 F2 N/* create a logger instance */' O: {6 l8 [6 E. B- S
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
2 n5 @' i$ x+ C# U% I( Wvar loggerBufP = new LoggerBuf.Params();/ \6 Y1 ]2 V' D' J" F
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- `7 Q4 ^4 ?! i( u1 z3 _loggerBufP.bufType = LoggerBuf.BufType_FIXED;- X+ T/ g4 l: B1 t: ?
! K3 ]9 H0 Q8 T) D( e) ]
var appLogger = LoggerBuf.create(loggerBufP);
" C2 t9 e% X# eappLogger.instance.name = "AppLog_Core1";; u* K4 t, s0 u
Defaults.common$.logger = appLogger;
& b6 |3 y/ m! M' p  iMemory.defaultHeapSize = 0x8192;   
: K: u& c9 [' iIdle.idleFxns[0] = "&LEDStatus";3 S+ J$ i( }- ], m  g
Cache.initSize.l2Size = Cache.L2Size_32K;
  W4 N+ m+ u, Y; J8 _0 |2 ^7 f$ F; D, s9 N# ^5 `
回复 支持 反对

使用道具 举报

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 */. N1 S' z9 A; z' A1 w5 _1 T* f
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! |$ z2 E% t9 t+ V% E
var heapMemParams = new HeapMem.Params();
$ C& z: q! |, [+ B) X$ WheapMemParams.size = 0x4000;
0 z4 M& ^7 W; h' e
5 k) \* g/ a  [3 B0 Q9 Hvar Memory = xdc.useModule('xdc.runtime.Memory');
- D, `. E- w+ D  [; W7 u9 dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
# ]6 ?( S2 }  b, w3 H" I7 W* [. E9 f0 N+ W' a7 X$ P  l2 c3 R
我大约calloc  每次共计大小为5K*16bits,
: s2 l1 h% ~$ w而默认配置才0x4000、需要改大。* {3 ~8 S$ |5 Y/ L  @) j5 T4 Y

) b1 }2 H0 E% r! [- ]7 H5 C
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* S7 z8 B& `" J1 D+ n7 D9 RProgram.heap = 0;+ Z- f2 T1 }' _7 M; g* G
Program.argSize = 100;  /* minimum size */! b0 `, }* m% R+ v3 n( f8 F- h
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-17 02:55 , Processed in 0.042826 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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