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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

1 G. ~+ b. E- m2 T    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
  T; I5 \  b/ ]7 d% U; p+ ~
* e6 ], A# L3 S5 {/ G8 z+ G' P. T" l其他程序段。。。。。* ~- \0 t  d* K: m$ s% m& p
  h- B# m3 D  v. [, i2 A
   free(x_d);
6 `, W1 b, W0 Q: l% {; t; Q$ A) x  [0 m: h# E3 Y% A8 {4 P
使用DSP侧单独调试功能,验证动态申请没有问题,5 D; \! Q9 s2 _

8 h3 p/ G6 I* q4 F( |3 ^' {9 i% v$ j" m但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 M8 c* i2 N! J" u0 V$ d3 L

) J9 R, j& ^- k9 i
" f, v& d  l0 }1 \2 w1 x. }9 v8 m* F4 b" t. ]+ F

; e' G8 z* U6 _
/ G% m! Z" j( S2 Q$ l3 l1 ~) |  Q8 W* N7 ^2 o, W

' Y: u# [5 a+ i. I2 t2 g7 ?1 F) z' t" j0 J$ H& a  \! X
8 z, |9 C$ x6 P3 m
; p" q$ }7 d( o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明! y6 j6 _6 T7 Q' l8 e
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; v9 I" O$ O2 E' j
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)( g' O* R' l- y  K7 X
" T" k0 ?; T8 S( v% Y* }( W
是不是需要在DSP.CFG中进行配置
8 }. c/ b# D3 x1 u我现在的配置为+ Y0 ]) v4 ^) n" G5 Q$ [
4 u: m) g2 E% o0 |8 @  E
/*6 B8 t( t* {9 C/ C0 ]9 B
*  ======== Operating System Configuration ========! _9 \, f9 i) E$ K8 K
*/  k/ F, u: _5 P" D$ u7 a8 g- q

+ U& I/ i- w9 m5 N+ a. W0 I# I" Q/* no rts heap */( D! }2 H' J$ Y7 X* K7 q; E2 p, @# h
Program.heap = 0;
, d& R! g- a7 fProgram.argSize = 100;  /* minimum size */
+ d7 a3 V" P/ L# GProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" E+ D: z* ~4 y: L
% J* {5 ~  b4 Z+ G3 Y/* create a default heap */
0 D9 [  D1 _( }+ h- X. ~/ d; vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ q" ~7 Z8 B3 b2 @7 b
var heapMemParams = new HeapMem.Params();
/ S8 B. h. e, u1 {heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 \2 K- x* ~0 N9 {
/ P% P! y: `( \( T  l
var Memory = xdc.useModule('xdc.runtime.Memory');1 }: }6 M% u; Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 r# ~1 Y" i0 Y9 b+ c4 I5 h7 o- a2 \! f
/* configure System module */1 Z/ _! |7 |8 w! Y& }3 @/ _/ }
var SysMin = xdc.useModule('xdc.runtime.SysMin');. a% c3 J& t5 T/ M% b# x- ]3 B
SysMin.bufSize = 0x1000;
0 |' W) }. Z& o7 ^2 D+ ESysMin.flushAtExit = false;
: _4 O% t  M8 Y4 a7 X5 X
' T/ q/ d$ c. b- Y" e) W' cvar System = xdc.useModule('xdc.runtime.System');
9 n. q4 L% A) f4 zSystem.SupportProxy = SysMin;0 p0 D, G- s" P- D7 n; E

4 Y) {) K2 ?, s: e& Z/* configure SysBios to use the lower half of Timer 1 */  g/ M8 Z' V, R, w5 ~3 B3 s
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
: N& u6 z; L" l% y5 n3 h1 C0 Gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
/ X  m$ |; P5 BTimer.timerSettings[1].master = true;9 R  [5 J* z$ f  E: E. G2 L2 I
Timer.defaultHalf = Timer.Half_LOWER;
* q: V: T" Y5 `* z9 ^: h5 O1 fClock.timerId = 1;) a- H) c8 G- I( ]# S2 W
1 Z! M1 C; m! h/ Q/ L- w, j

% p5 X5 I! }! r. `+ R/ P9 ~/*
! h8 t: _) J# S1 s8 i! j *  ======== Miscellaneous Configuration ========
0 e( ~7 \) x4 m4 H */8 X4 I) G! a( m% M6 R$ P+ ^

% U) z  @7 [# C& e2 `/* set default diags mask */
/ p  x9 p. B. Z. o! ]var Diags = xdc.useModule('xdc.runtime.Diags');
4 u9 V/ @# \8 V( _var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ T8 k, v1 |4 i6 G( K8 g' c; r$ L7 _% I- |: _* S5 G
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 A8 I6 C5 i$ ?, e& i& g* qDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
0 r: G! F1 e. R2 U  k( A; H* tDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% x& F4 ?4 E. Y% m; k3 uDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */, D- x; e% U$ A1 {! q
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */. q' e5 P5 ?# Q( \! N- k: [, Y8 u
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;( [% s# I0 H1 _: @+ {; k0 d
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ i( w1 k: q( ^
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;! V+ s! N6 V- C: H( O" r
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ [1 c% P5 l& ~9 i6 NDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;$ C6 I% J: E3 e* x6 p
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& ?( O  C$ c) Z4 o8 KDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  g6 b' v( j# B# z( c  uDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 O6 k8 b& V1 \4 Z: P: |Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: z( ~9 \2 Y9 Y/ t0 B3 L; f2 w. @9 ~  e
/* override diags mask for selected modules */
& C! y5 G8 M& Bxdc.useModule('xdc.runtime.Main');0 E: t) o6 B7 @/ a- f
Diags.setMaskMeta(
3 \$ ]4 a2 `8 }4 b8 Z    "xdc.runtime.Main",& H+ X* {- p9 C7 t0 ]
    Diags.ENTRY | Diags.EXIT | Diags.INFO,6 W; s& b$ @: w
    Diags.RUNTIME_ON
( b, V7 I1 y' _. Y$ _5 @);
7 e7 Q) ^" E, r/ ]' T, `& d3 B
; K& F/ U' M% H% N$ ]var Registry = xdc.useModule('xdc.runtime.Registry');/ C4 b% Y8 ~  l
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  @  S. _. v# I& H4 o- |5 t1 J
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  ^: q  j; P/ gRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% I/ V* ^! ~4 w0 }Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 c4 P. B3 {9 N* n3 r, A5 S' `

/ ]* g5 l$ }! D  V9 j0 J/* create a logger instance */  m6 F- D2 g5 r7 A( W' T, t) k* m
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; K: L+ L, a/ b2 g% qvar loggerBufP = new LoggerBuf.Params();, W! s8 F  Z8 T- l9 x. R+ M, d. M, q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! W$ S- N* @7 J" q6 t- e
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 m, z$ c8 H- N9 M
9 u/ |, n6 m* Z1 H9 \var appLogger = LoggerBuf.create(loggerBufP);
6 v$ ?- L) n* j& o0 ]2 ~appLogger.instance.name = "AppLog_Core1";
; n& }0 |7 _# |, tDefaults.common$.logger = appLogger;
, t) V( f5 H7 J: {2 W/ oMemory.defaultHeapSize = 0x8192;   
7 S& o7 a, F! ^" b' A  A0 oIdle.idleFxns[0] = "&LEDStatus";
& q- t/ m* j* m7 t  n( HCache.initSize.l2Size = Cache.L2Size_32K;
5 l/ R3 I: D% w0 T& @% f/ u2 M  I( F+ ~' r- S5 R2 P1 G
回复 支持 反对

使用道具 举报

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 */' E- k$ e% Y# ^; M) s7 S% S5 c) ?( m; d
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" Q" E) v* z  O9 m* x/ J4 t
var heapMemParams = new HeapMem.Params();7 p5 E2 y2 _- L% B
heapMemParams.size = 0x4000;5 O, K7 x0 Z( o! ~7 g# `7 _

5 j. J+ Z9 g% g, u/ x+ Bvar Memory = xdc.useModule('xdc.runtime.Memory');  W) H, Y5 x" A9 s. ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 d: v% b3 N# X+ B1 p1 X
) e: \+ B: D3 g& I6 T  q4 {! }& g
我大约calloc  每次共计大小为5K*16bits,
9 h5 b" J+ ^. e3 H" b. l6 j. {而默认配置才0x4000、需要改大。" J* `1 o! E1 D! \: J
7 m; ^9 B0 n& [) b8 e, v. F
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */$ d5 v/ m' e% r& z4 w+ t7 b0 v$ R
Program.heap = 0;* Y( n& v1 l- h& `
Program.argSize = 100;  /* minimum size */
: }7 F) Z9 \. x0 AProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-6 06:51 , Processed in 0.040802 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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