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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构1 `6 r  T# t7 T1 h  b) k- v
2 R+ c  K0 i$ t" K6 A# d% [! V
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 \9 P+ t# I6 I8 i- K- j5 l

; z" \2 u& e  d/ R2 Q( ?6 Y  _- G其他程序段。。。。。6 V1 e3 p% ^. O, h

- @0 A. s4 A% `/ @; M) X8 L   free(x_d);
% p( A8 w' t( A7 }0 Y+ I8 S* X: O* G
1 E* ^2 m# G$ B( X' L" I, q使用DSP侧单独调试功能,验证动态申请没有问题,4 C% e9 g+ ~( H! I  W) C2 C
, e+ c* \9 G% a3 m
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。" U* l9 Y2 T+ E. O* E* ]& [
9 v' X" v; |; ~+ ]) T) ?, O
/ x" A) q1 S) L; h" @" N! v( L

  p1 K! _, j5 {5 j8 P# ?0 D1 |: x1 q5 `  y4 o- ?

' y" }$ m! h9 n. Q% e7 Z
0 r; O6 ]" P1 Q) V$ {
; o9 A. N# h7 D: x4 R2 z1 F. I) K, b6 W8 r; C# ^! @4 N5 ~- W

1 p3 y6 O7 s- [( }- ?6 b$ S4 X# `
) |0 A, j( i: h. F- _, _3 |* ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明; a0 v& ]& e8 O; G) h
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
2 `/ b; ~7 j( o(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ Y: P  \% ^( R$ ^* }

  V* m8 q8 ?+ p% B  e是不是需要在DSP.CFG中进行配置! l6 R* a$ z$ K
我现在的配置为
& w7 Y* p; j7 `4 v% r  E
3 x* ^* r3 H$ U9 z  X! o- |. G/*
7 g- i# K2 G3 a% G *  ======== Operating System Configuration ========4 W7 j0 e4 p: B. r* G
*/( Q0 P9 ^2 L$ b2 ?! }( h/ f

+ }* U1 e! n1 N2 e) H% G" M/* no rts heap */
2 X9 V" }0 b4 a( y4 tProgram.heap = 0;$ m' l" |* W7 `9 l
Program.argSize = 100;  /* minimum size */
0 m4 _% q! F, ^- H- U8 pProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, H5 u: K) r- s9 W8 h: h3 v( a1 s
  g/ W7 E  K5 F0 T" N
/* create a default heap */$ e' F+ g* z; P2 |6 U' y/ H. I
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 W6 U" A; Z$ b/ a, `1 Z
var heapMemParams = new HeapMem.Params();3 q+ I: T% P3 ]% j
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大$ K+ S' e& E8 n2 K% a  y
! D5 t) C/ q& R$ u7 V
var Memory = xdc.useModule('xdc.runtime.Memory');. B1 E: y- k* f3 e* Z& A
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- T6 U3 \. x# D( Y
- l' N/ M5 ]4 W8 B. l) ^+ v" |/* configure System module */
" p2 n8 F+ F' I: q: V4 Y) nvar SysMin = xdc.useModule('xdc.runtime.SysMin');9 [  ?8 t$ T  ?4 y+ f2 y
SysMin.bufSize = 0x1000;
! R2 B  [6 ]. o2 j, e# s& }SysMin.flushAtExit = false;; y9 l# v; z# P) `4 O4 \7 E
8 H3 i; I" P# D) q1 _1 ]
var System = xdc.useModule('xdc.runtime.System');1 Z" K1 V! Y5 F. a/ H8 \
System.SupportProxy = SysMin;) G: x8 [5 s/ u
$ t0 b1 |* l: U& v. O3 ]% U
/* configure SysBios to use the lower half of Timer 1 */
4 B# V5 J& O& e  `+ w! ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
  l: e# F% q1 F/ p3 U6 |var Clock = xdc.useModule('ti.sysbios.knl.Clock');
' u9 c/ t6 r; h( a; V: U! S' VTimer.timerSettings[1].master = true;
2 R6 a: [. u* j- N# T  XTimer.defaultHalf = Timer.Half_LOWER;% A5 j& f/ D8 F% S; q7 _
Clock.timerId = 1;1 d0 O+ d6 `; H$ m
6 p) M' L* ]. r& ]- p* ^4 y; f$ `
! W- ]3 S: X1 ]& ^. Z
/*
" {  K' g3 R, q) K; p *  ======== Miscellaneous Configuration ========8 @$ \% X& a. ]  p& {6 n: r. [
*/
% Q) T. @; u* d4 M6 o" D. r3 K. A* Q) ?
/* set default diags mask */
1 f) ~: F+ x$ c$ q) Y% jvar Diags = xdc.useModule('xdc.runtime.Diags');9 F6 q- r. \* z! J2 @7 a3 S, ?( v
var Defaults = xdc.useModule('xdc.runtime.Defaults');0 L, L& v5 T# j! s: }) U9 D1 ]
4 {# t1 Y! Z4 h$ c" ?
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;8 ^4 D4 z/ i2 j/ L. W9 W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( _3 b8 B! {: q; Y! MDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
! s8 [* c" O. U' fDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ F* T, l' o2 t* J# \3 }; C- dDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& v6 @8 C& G; eDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 V* M8 L$ T4 U4 f) X0 h) CDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( F! b: i9 S% f- ?
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
9 e& Y  |3 z; ]( p: bDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  e" w* F* d6 b6 d6 f, eDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;' f  C, {" W: o5 A/ p) t
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, `( L& p, ~( w" X! a! ^! ODefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* s9 [: u/ T% Y0 ~: aDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 k) k- A& ~' s; }2 j2 ~
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
; q- u7 s: x) t# W
2 V& _. X# Z1 {/ I- y! n/* override diags mask for selected modules */
( k6 }; C2 R1 q& c. z$ Q! rxdc.useModule('xdc.runtime.Main');
( a6 M9 S  d, h1 q2 ODiags.setMaskMeta($ f9 G$ ^" ]) w
    "xdc.runtime.Main",
4 B- G. S" M2 M& ]2 l8 }& \    Diags.ENTRY | Diags.EXIT | Diags.INFO,* `; d7 Y- i* h! ]1 y: m
    Diags.RUNTIME_ON) Z- [+ [8 g+ e
);
; g  i( G8 u$ m9 `7 c# q
6 r8 ^, R$ _1 f6 k+ K/ Avar Registry = xdc.useModule('xdc.runtime.Registry');
, ]9 ?- b- x( ]4 Y1 kRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 s0 \& _, P. C1 v1 TRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
4 l: b5 d- @, R# URegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;) x# u. ~: c" ^( v* }7 T! c
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;# m# ^" [1 A1 e$ }  ^
( A) v  ]. k7 S
/* create a logger instance */4 R9 V% X: Q. b
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 H8 w" j' q1 F6 q2 `8 R
var loggerBufP = new LoggerBuf.Params();
8 V6 W. u( J1 f+ TloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 p+ K0 Z. K5 {  Q. w' a' p" {loggerBufP.bufType = LoggerBuf.BufType_FIXED;+ I. T3 s0 P, k% ~' S0 j- l2 I  F: c5 V

, W8 G3 [# B1 u8 q  y- K2 vvar appLogger = LoggerBuf.create(loggerBufP);
( z& R+ @) |8 d: {% W  gappLogger.instance.name = "AppLog_Core1";7 c% P5 c. x1 p) k6 c* }
Defaults.common$.logger = appLogger;  ?: O. l9 ^$ n% d, }$ |$ q
Memory.defaultHeapSize = 0x8192;   
! d9 J% U9 z, x9 YIdle.idleFxns[0] = "&LEDStatus";
5 t3 v8 P& d3 o! {  z0 sCache.initSize.l2Size = Cache.L2Size_32K;8 O& h/ s; ]1 r* Y

/ b. O$ @& t2 q$ N$ ^
回复 支持 反对

使用道具 举报

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 */* q2 P1 x) i; C0 e* ^0 U+ s8 o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- A1 Q0 \( L) k, ?, u. v
var heapMemParams = new HeapMem.Params();' d% c' I3 ?" e. M# D* |6 j
heapMemParams.size = 0x4000;8 M4 H) T- ?# q; j1 r  ?& K9 T7 R
3 ~" a$ a$ W1 \
var Memory = xdc.useModule('xdc.runtime.Memory');( w, b4 J1 s6 ~! B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; p3 @' X" ^  n9 N2 Y7 _, I# ~1 X4 F5 L5 ^2 P; }3 S
我大约calloc  每次共计大小为5K*16bits,4 \5 Z# d+ Z, W) [# c9 e4 E
而默认配置才0x4000、需要改大。
1 N: m! w( z) J& E9 @/ b/ B
0 T( @2 Q9 m3 y" {1 q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */( I% W2 I- x' ]; ?9 s/ ^8 ~
Program.heap = 0;
- x$ i! H# [: o' CProgram.argSize = 100;  /* minimum size */7 x( e1 L. k, @) \8 S9 l2 ~
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-2 01:59 , Processed in 0.094510 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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