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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构; B, i8 y5 p, z: }" D% x/ G  n( f8 K
0 [6 |; w" o+ h3 q5 U4 K( b) N6 g' p8 G. n
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
; z0 i- E: D( Z5 e$ y- ~2 ^; [5 w  F8 Y
其他程序段。。。。。
  B& T! I+ e0 l  U# m4 ]5 W! y ; t, a! ^2 t* r
   free(x_d);
. a6 W4 {6 q3 F1 f  D# C0 i+ u' o
- R3 e$ I9 ~. z使用DSP侧单独调试功能,验证动态申请没有问题,
7 }5 e# g# U" B( J$ y  Z. C; o* j6 P2 h* u# R
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' r# y- e( s, i0 R% r1 v' a
/ [1 X; H* ~! |9 c  u3 m' s
3 L9 n+ v# ?6 ]/ ~: `
/ A% @: F* b  `  F1 Y5 U

* u& }- K4 F; a) ~
9 H7 [9 y6 ^8 E& h3 _4 {6 S: f6 k1 S1 Z. t
! {5 v4 N+ U% j$ C2 C2 i2 P
7 [$ y1 E4 O. ]/ r; W; w

# F0 Z: M! _0 t# V0 l- Z4 W- O' }  X. M* U; }7 e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
& R# K$ d/ e  P5 rProgram.heap = 0;
- K& l/ ]! |( u# H$ LProgram.argSize = 100;  /* minimum size */
; f: a0 v; {5 Q* hProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */) W' \: X; a: o/ @: J9 e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- s5 Y6 [0 X& _( t* mvar heapMemParams = new HeapMem.Params();7 ^3 v5 }- r: q$ [) f/ E
heapMemParams.size = 0x4000;: X6 a  m* s" Z. [

8 L( y9 t9 s- z9 Xvar Memory = xdc.useModule('xdc.runtime.Memory');
$ b0 @" V7 |' Y* CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
' R9 o6 o2 U# H
! F6 ~" ~: H0 e我大约calloc  每次共计大小为5K*16bits,
! \  V) I: w  L: F* H) c而默认配置才0x4000、需要改大。( x, O$ q+ v9 b& {) x. ^) n  A

1 c/ h. j4 A* P; m6 c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: D$ {6 x: b4 U' a- k/ j: l4 W我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
5 U3 q6 h# U2 L2 S. |5 |(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
. n- S7 k  U  N1 w* g8 q$ Y
- |& i. g& ?- m3 X9 ~5 f
是不是需要在DSP.CFG中进行配置
4 Y" n! `1 Z" l7 O9 k我现在的配置为2 U  |  ~! t" ]6 F& d
1 I# v& Q+ `4 F: ]; W9 o
/*" D# d+ ~( k9 z3 @' @6 l% L( m* L
*  ======== Operating System Configuration ========3 q) W/ e, k0 v+ y2 y$ R# X
*/
& y; F1 ^6 c# ^' E) {
7 A% g2 S$ _/ U5 J9 E7 p/* no rts heap */- [. V6 n1 p- v, O% {: Y
Program.heap = 0;
3 b2 {) Q3 f& U4 I+ T7 CProgram.argSize = 100;  /* minimum size */
! p4 Y6 M8 N7 I' CProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! {  `( L' S% S

1 Y5 w' s: M: B! d% D4 B/* create a default heap */( W* F1 x: @) T  z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) |" L8 V1 A& s0 e
var heapMemParams = new HeapMem.Params();
, x  _) ~7 E4 _. sheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* p2 ]" m4 a9 g9 r
  ^! e/ \1 R% c2 |9 m
var Memory = xdc.useModule('xdc.runtime.Memory');
9 Z- @  T3 r+ H% |( ^7 SMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
# Y  U/ @+ o  \& ^7 G1 W2 b9 Y: C% z1 Z3 E2 j
/* configure System module */' b8 ?! P* c2 w1 Z5 h
var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 D; R. k3 r7 A" Q  H, ~SysMin.bufSize = 0x1000;# b2 s9 U4 q( T
SysMin.flushAtExit = false;3 `; X- h# W# Y+ p. l0 U

9 W4 z8 {0 P# y( t8 d* d+ t9 Kvar System = xdc.useModule('xdc.runtime.System');
( K( l  c  Y9 v& D, {6 i* oSystem.SupportProxy = SysMin;! W+ ^0 u% G/ _4 k6 `6 Z9 N
0 d/ p7 u6 I  E8 Q6 `
/* configure SysBios to use the lower half of Timer 1 */; |% t1 m# N+ h1 Z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# d2 J, ]1 v; X" {  U/ |
var Clock = xdc.useModule('ti.sysbios.knl.Clock');- [8 o' l. e" c3 d. N! J
Timer.timerSettings[1].master = true;
* C2 L7 f: o6 |- {' B+ a+ vTimer.defaultHalf = Timer.Half_LOWER;. F+ _$ E" O+ C0 S  x% R
Clock.timerId = 1;
  L3 ^2 ~3 K/ g+ |/ a7 C  g
  x  n* h- C) I- x4 C( `3 o
" S% d1 n% L' V! L* V* l; {$ s/ E/ J+ A) {/*
- x( g- j/ P" \1 o, @9 o: U *  ======== Miscellaneous Configuration ========( n3 _6 k: ^/ ?' H/ R
*/
; z1 j& t) j4 c6 h1 O: I3 `
, `% }$ s# O# h, R8 f' J0 R+ C/* set default diags mask */) B% i' V( J8 B
var Diags = xdc.useModule('xdc.runtime.Diags');
& T0 h" ^& x7 h, {1 w* o$ ovar Defaults = xdc.useModule('xdc.runtime.Defaults');
, W+ Z$ M: y; m& q! I7 X, ?6 `, S6 M% f# ~0 T- Y1 }, [1 N
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, t/ D* F8 f6 }, ]4 _
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;* B) i" a) e9 X$ E* [; f
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 u- Q8 Z& G: m: L, _Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 @" u5 u2 [$ pDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 o. s$ A& B( u$ N  [7 N2 LDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 k( d% @7 ~& o4 t: ?8 v
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;& T5 K8 t* Y& m
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
# e$ u4 s4 y& f5 I, ~# ~7 [Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
: @0 z, u+ m8 E! r2 B/ v4 U) iDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;; `3 k4 |/ D- C
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 z: P. o  Y/ [; kDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, ^% ?4 q4 u. B& ~! Z, Z; ?
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 d4 P2 i* \  _) f; r( hDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
3 C+ S, ?* d3 A9 M3 ]6 s
  j3 G& o; \9 O/ m/* override diags mask for selected modules */
3 [( ]: x9 S/ \1 N# Q: Dxdc.useModule('xdc.runtime.Main');
" _1 w( P) U( l+ b/ NDiags.setMaskMeta(
0 I7 A. m' v9 {    "xdc.runtime.Main",
1 k0 X) O% b" l0 @    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ U" E* L, G! s    Diags.RUNTIME_ON
) p- S0 z* q7 S);  ^2 K: P  K8 G" c% z. c

/ y! v. ]# s" ^& E5 avar Registry = xdc.useModule('xdc.runtime.Registry');1 ?4 R* G) @* E
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
$ B) Z# W- a8 `7 d8 wRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 V* \9 U0 |) [" w7 R4 I3 o5 l' |
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 |0 {! K# ]# F7 o  N/ hRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
4 }3 w5 x" o1 ]( x0 W: q' y  F! L+ R# ~9 D7 x
/* create a logger instance */
8 U! ?7 Q1 P$ i# x5 nvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');9 X; B  U* t7 b( M. y
var loggerBufP = new LoggerBuf.Params();9 k- p. k$ u% w7 f* i
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */1 D: k5 r$ d6 W
loggerBufP.bufType = LoggerBuf.BufType_FIXED;* }' r. j+ d, W8 h+ V, p/ T

" @3 M" ?) r* n2 svar appLogger = LoggerBuf.create(loggerBufP);1 ?, [! ]& i: Q/ [9 s( q! s
appLogger.instance.name = "AppLog_Core1";* R: P3 A, d' t4 f
Defaults.common$.logger = appLogger;
3 U  m  `( c; |  G1 \Memory.defaultHeapSize = 0x8192;    % \4 v" U) b5 F) o. g
Idle.idleFxns[0] = "&LEDStatus";+ q3 b' R* Z3 r8 a
Cache.initSize.l2Size = Cache.L2Size_32K;
: b# V/ K8 L, U& |1 r% q. z. c/ J$ I0 U% u4 M; r! H
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-7 06:04 , Processed in 0.042152 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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