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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 |( ?4 p. \2 [! A& f9 Y
2 ], w+ e, Z3 |5 l    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
5 j$ K' {. t8 l( b$ j6 ?( S+ g: K* r! n7 W
其他程序段。。。。。2 P1 J; M8 }2 _0 g# d# U  [0 @6 m- z
! |4 j: K- y6 A- n: H
   free(x_d);" z4 _" I2 [9 R0 \+ I+ J
# I5 F4 u; U5 H
使用DSP侧单独调试功能,验证动态申请没有问题,
( ?  q4 `, l" U! U; Z& q4 N: v: H, ]# _5 X( R/ ^# u
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。3 d1 ^( x3 I$ m! u! k4 ]5 ?

& z$ n  t2 e( O. i+ G' [
2 c+ l2 o1 f: r# ^7 q) {; b) [1 `  {8 @5 W/ F8 _
% y0 K% S/ P4 O8 p  V# C; A) B
# w! ?; h# S1 D% s3 [: r: k2 G
: q: H) Z  c$ P1 {  U$ g
+ q/ `- ~& `7 e) M/ l( Q0 x- K

6 @9 @# `7 ^! Y6 ]) a8 r0 U/ `0 u: _8 u

2 y! W' t0 p7 h& @) G" Y# u1 |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  J* |8 b( [- O% o我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: u. J; K# E" |( z/ W" F1 H. l(不过疑惑的是,为何单独DSP仿真就没有问题呢?), A( E- M% e$ d9 |  B
! @! n: Q" y9 H9 ]  Q6 d9 z
是不是需要在DSP.CFG中进行配置
  _) C( O1 Y$ Y* V我现在的配置为
. K  Y* L/ [' E( a7 G
- u/ f9 B5 }# j" t0 R3 _1 e/*
( w* N5 L0 h9 D/ s *  ======== Operating System Configuration ========% B$ }& t+ L: {# K
*/
+ u- L  A, u4 s/ m+ ]. {
6 n# e8 M  d) e8 Q$ w/* no rts heap */9 ~. J, K. t; L& f8 y
Program.heap = 0;
: ^* [- M4 C2 [/ h( T3 i: M0 OProgram.argSize = 100;  /* minimum size */
% j0 c, k9 ~! mProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
! _# s9 Y6 _/ A  U/ Q* `- O
, Y5 P1 j3 f! G# j) ]& o/* create a default heap */
+ a: y6 Y2 w; }, W  I! r2 f( k/ Qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; c2 l4 [1 Y- D) r* N0 ~var heapMemParams = new HeapMem.Params();
- |# f# C) ]  m$ yheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! J* D( t6 i# d* Z3 I8 r
$ I7 i0 m6 }$ @2 X/ F
var Memory = xdc.useModule('xdc.runtime.Memory');4 F# e6 I+ M: u- V/ i: k
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. Q3 u1 y1 C+ M1 o  E8 v' @
2 Y0 n2 Z( `, N9 u% U$ X3 M" r/* configure System module */' K: ?0 [! H; h3 v
var SysMin = xdc.useModule('xdc.runtime.SysMin');  s8 W! y; y. @' r; m
SysMin.bufSize = 0x1000;0 {) i" W7 }$ |' k( z2 c+ h
SysMin.flushAtExit = false;3 ^7 |$ c4 w( u) F( u

1 \" m3 k7 d2 K/ rvar System = xdc.useModule('xdc.runtime.System');
3 s7 u7 T' d% c9 L' c$ B. F$ T/ HSystem.SupportProxy = SysMin;
/ K. {9 y' k9 L& Z+ k
7 j$ C' ?# y0 k" w$ R6 J/* configure SysBios to use the lower half of Timer 1 */+ E: u8 C" G  N( h. a2 w: B5 U
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 Q9 T, i$ C) I) H: f
var Clock = xdc.useModule('ti.sysbios.knl.Clock');1 ^  {! ^, b* x! w* c) C- n
Timer.timerSettings[1].master = true;
  Q8 i6 w: d9 QTimer.defaultHalf = Timer.Half_LOWER;1 }; \  v! @+ w8 U
Clock.timerId = 1;
% D! m4 X' P8 A/ q! q( c' n) b- Y3 u0 s+ y! \3 ?

+ L9 x6 ^: D% {4 s/*3 N' A/ X& b. q# w1 P8 ^$ v. P4 Z
*  ======== Miscellaneous Configuration ========
) T/ b3 C( J/ K$ w6 ` */
/ g+ l! a8 n& C) v( c8 e* E9 j4 b5 G7 X' k0 \/ Z
/* set default diags mask */
+ B0 A' V) k6 B1 w. @( W; Gvar Diags = xdc.useModule('xdc.runtime.Diags');; b+ ]  V! I7 r' y
var Defaults = xdc.useModule('xdc.runtime.Defaults');
! a: Q: r. Z7 q( B9 N. [
2 p; r2 l/ e( C: b1 g' h; f/ }- vDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 k5 S1 E5 i9 M$ d! Y, [
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;) O, ^+ K5 o3 M2 b
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;) v7 q& U9 \. E
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 J! X, C* T8 zDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */5 p9 K$ F) S: S
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; y. N; M$ {: o# d1 B$ bDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) d; _. \$ j, U. T5 w
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 S4 D5 Z' U/ ^2 d2 V; [
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
, l$ j' f; u# K4 c7 zDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;: s5 e% U( v1 V( _; m
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;+ o4 k. C! x1 s7 [
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 H: y4 A( M; P/ E
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 a+ ~3 l: ^8 K4 XDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ t' S% p0 n+ \  `8 E9 Z1 p6 [% ]7 V0 `$ A5 e% ~- h* [3 w, ?
/* override diags mask for selected modules */& o# _9 a9 B0 \
xdc.useModule('xdc.runtime.Main');3 G! z& l3 Q3 [( @0 N
Diags.setMaskMeta(
' R1 r" \2 i9 I) u3 ^8 h, C) M    "xdc.runtime.Main",
; u) L# f  x6 ~    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 G2 W6 f3 A8 T% T- X0 q' [4 n
    Diags.RUNTIME_ON
3 U" Y  J  d& f# o: B);
6 m9 ~8 B- x) e( S/ X  p# K1 J  ]7 _( T, o, u4 y7 s
var Registry = xdc.useModule('xdc.runtime.Registry');
0 O+ L  {1 w: F) }, \% sRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& i+ T; x' `! r* bRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! x# L( p( ^% n
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 U- P, k5 R3 J2 D8 \# B& P
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 e6 g+ M" y( I/ v# N# p& f

: T4 u+ e' a5 a/* create a logger instance */
9 a6 |* Q7 _: l, x# }6 ?# g# ]var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');0 i+ e- F. ]9 g3 D9 h- b# w/ |
var loggerBufP = new LoggerBuf.Params();
8 G5 Y, @% q5 q$ `loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
0 l, _: r2 l) n5 f) uloggerBufP.bufType = LoggerBuf.BufType_FIXED;
  F! R% T; ]: h1 _8 j. L; ~! h) B2 D: y! {0 [
var appLogger = LoggerBuf.create(loggerBufP);- p. l8 j- j3 Q  m' q
appLogger.instance.name = "AppLog_Core1";
3 c  s- _& F: U. X- f; oDefaults.common$.logger = appLogger;/ d( t% W  D# s4 U
Memory.defaultHeapSize = 0x8192;    - N0 \1 R: s- A0 G+ D7 I8 M
Idle.idleFxns[0] = "&LEDStatus";! Y( F# W# V3 x8 ~) Q9 O
Cache.initSize.l2Size = Cache.L2Size_32K;. O' K2 d% T: T# ~5 G! x) _' U
8 f' F6 ^% g- {6 Z2 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 *// O! U( k# e5 @4 \2 N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' U) J2 E" B% P5 x! n# Q
var heapMemParams = new HeapMem.Params();
" g  |) I) u2 B$ m5 ~heapMemParams.size = 0x4000;$ j( P7 `6 W9 h
1 B2 \2 g, S9 j5 {' m8 G
var Memory = xdc.useModule('xdc.runtime.Memory');
) k8 N/ {2 d  a0 D6 c* vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);  I; [% k2 x' |* U# [) J" ]! J
# L/ }7 G; ?* B  ^' `. K$ v6 c, `
我大约calloc  每次共计大小为5K*16bits,
7 N( e7 D4 `5 Q- x2 o# X5 S$ s而默认配置才0x4000、需要改大。$ w) I/ v4 w$ C& M* x

. e( ~% z/ t: |4 X" v- h  |! y+ Y- c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */; O) x, _+ s4 t; ^
Program.heap = 0;9 M% u7 F  ]1 B# n5 l, N
Program.argSize = 100;  /* minimum size */3 g, G& R. ~3 B# u7 O8 m$ h. Z5 A3 u
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-27 20:00 , Processed in 0.042992 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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