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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构. ^2 ~- \& x. `( p# L! C! C
( W! @3 B, L9 a0 Y0 k# L) F4 X( j
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, C6 K' m# {/ T0 [; h8 V

4 _7 T1 F+ `8 G& D5 x1 w7 A* E其他程序段。。。。。! x0 H  k2 q) i4 B, v

9 ^0 |1 m/ X$ F& S   free(x_d);0 `+ M& S  C( e0 P6 n9 F# r7 e
% h: P& y" `- r0 t. w0 W9 @
使用DSP侧单独调试功能,验证动态申请没有问题,
# z# l! {# `6 a$ H0 V4 K  f% a" A0 s6 f* }# E" K( Z2 j; c& q: \
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 v0 i+ y, X" |0 ~5 u& Z7 v& B& c
0 ?$ }! `+ D8 U
$ Z* C/ z$ |9 l8 i+ k
* j, [9 X) k* ~1 {
/ t$ T. A( M) W

* }4 G3 D9 n* S$ J, |: I' j& Z
0 l7 C& A) o* U( W+ g
( S, ?# s$ G! C9 `
# U% T  r3 [: }2 D! B
% o' F* t& N/ w. M% }
0 u' E7 M4 g$ O2 u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明# s/ A1 [4 \1 ]
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
6 w$ H- H* m* ~1 N8 F' q, h8 G(不过疑惑的是,为何单独DSP仿真就没有问题呢?): X3 Z: R0 i8 }% u3 Z- q  I

2 N& E  j# `3 A: a9 i9 L是不是需要在DSP.CFG中进行配置
9 ~  ~3 |3 V2 O0 |我现在的配置为- d! f6 [: s$ J

3 m. Z& Y- ?$ n& ?% f1 t' {9 m/*/ h2 n" V: A0 I5 x) Q# I9 [
*  ======== Operating System Configuration ========( R0 n& P) U' E' j( D+ R
*/
. N# X) p0 ^1 H" d, u! [3 _' |3 H% v; z) A* D0 c' N' y
/* no rts heap */# c+ j, i+ X7 L' t3 d1 ~. f0 C
Program.heap = 0;4 M2 M/ T' C: b2 S0 q  L7 a0 j9 c  e
Program.argSize = 100;  /* minimum size */
% [8 Z' |1 t$ o" G" d- fProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- Q' U# \7 A4 W% h( t, q; M+ g# L: r; g! g# R
/* create a default heap */
' H/ L- x+ k5 Y" F/ v/ q& Jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 `& Q6 p8 K' q* W5 B/ o
var heapMemParams = new HeapMem.Params();
( Z& f3 F' M! c! z; L8 {heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 ]& Z- d" l, a/ R  R5 `; O
0 x. r% z' }( [
var Memory = xdc.useModule('xdc.runtime.Memory');
% q, u, x* U% h7 X' ]Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& d5 D1 }2 X/ U4 E

3 ?& {# G$ l- I) E/* configure System module */6 x1 d$ D' v" R" h% k3 `( W1 f" ~
var SysMin = xdc.useModule('xdc.runtime.SysMin');
4 G/ i6 n; O6 N. O* tSysMin.bufSize = 0x1000;
- m. n# [3 |7 ~SysMin.flushAtExit = false;
& t$ x+ p7 Q6 Y: O
  i' r& C/ _3 h; E1 ivar System = xdc.useModule('xdc.runtime.System');
/ D$ {: {4 B; ?; E( ?4 E; C6 \System.SupportProxy = SysMin;
; z% _1 f& O2 c* v+ M4 n+ R3 j
: E  h6 F9 D4 O4 y4 ~) o8 b1 J/* configure SysBios to use the lower half of Timer 1 */4 ]% e1 O5 c7 F
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');* W/ G9 v' w; \4 p1 n) p
var Clock = xdc.useModule('ti.sysbios.knl.Clock');) @$ \8 h8 V( o( J5 w( D
Timer.timerSettings[1].master = true;
& W5 t# s- n) R0 W0 {Timer.defaultHalf = Timer.Half_LOWER;: R; l  d# j/ s" U
Clock.timerId = 1;
" I. k0 T* D8 t$ B/ M( L2 [& ~7 w, c9 |$ ]6 U
7 E2 p4 y0 I3 ^$ s5 Q
/*
& ~! K; R& }6 M0 i# q0 i1 n' V! A *  ======== Miscellaneous Configuration ========* M, m+ I+ _/ Y: i: t
*/  W6 V/ C& f$ o" j! T& t0 L* h" c

' o* `% K* n# K' B7 R/* set default diags mask */
) L4 [7 a# B/ mvar Diags = xdc.useModule('xdc.runtime.Diags');$ A1 Q' R' x, j7 a" U# ^2 d3 ^
var Defaults = xdc.useModule('xdc.runtime.Defaults');
/ \) u1 h( \* U* D! N3 {! \7 o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
+ u" H' e2 D; S$ h+ t  ?2 n( ]8 l) ?/ DDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;8 k" n8 c8 [7 H% A
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
6 }9 f. y  P; X( Q( z; }Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
8 ?& n/ c' g* x3 N; dDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- [/ y2 d* V+ g' CDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;' Y5 t6 Q+ Z1 ~# A! x" y* z; I: A
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) ?$ X! T  i9 t9 P  h9 N* b
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% U9 c: g) L4 H0 }- x/ K. i
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! Y* T8 ]( ?" u- I9 @Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% {" \8 A% z6 G( G# I7 o) eDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;2 d# C$ G/ g. d: @
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
& Y4 s3 ]: {; w$ NDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 L" e3 J( r% c. Q6 s, x0 i
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" Q4 F1 |1 Z: G- A
( ?( L! g- N  l* t1 A
/* override diags mask for selected modules */+ R" h3 b9 _% N
xdc.useModule('xdc.runtime.Main');" \) l. [' Z5 M! |# h: C
Diags.setMaskMeta(! y; ?* D+ k) P) @7 Q
    "xdc.runtime.Main",
1 x$ Y, Q$ K" l# p& [    Diags.ENTRY | Diags.EXIT | Diags.INFO,
! k  x, i' E7 [" q    Diags.RUNTIME_ON
) g2 w3 O# N! P8 k9 F8 E% v1 I' y);6 U, P, ~' }8 Y' ?* W" \

. z5 G! C: ^. |var Registry = xdc.useModule('xdc.runtime.Registry');/ d5 T- J! K% g" i; U8 ]
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ p9 Q- f$ n7 q% V9 u3 T% K6 yRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* {+ G6 p/ [: z: F
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;  p# L& ~7 S& [9 c) R
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! i# ^, N3 G7 a8 S( f9 p! W- P; ^! z) c% u) U; T) o. U
/* create a logger instance */: R# j8 @  r9 h% h
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# J7 }4 C1 k* j; A! @# Vvar loggerBufP = new LoggerBuf.Params();8 {/ z" o8 D, J" |
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- s0 Q6 E. ^/ Y9 Z8 i7 m
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 S5 |. c; M5 m3 f( g$ s( t( x- g$ P; }, J# x! S1 _. w7 s
var appLogger = LoggerBuf.create(loggerBufP);# N; a) a% J6 s$ l
appLogger.instance.name = "AppLog_Core1";% H' W3 u+ T7 ^$ O$ L9 ]0 z
Defaults.common$.logger = appLogger;
5 I8 t0 _6 u; G) U) _& E' _+ o0 fMemory.defaultHeapSize = 0x8192;   
/ g0 I$ ~# v. y% nIdle.idleFxns[0] = "&LEDStatus";
4 c# F6 i; i% T) ]! W9 RCache.initSize.l2Size = Cache.L2Size_32K;: X5 |4 K( `2 b! p4 M1 r) n

$ }- z  r0 S1 s6 y0 N( d
回复 支持 反对

使用道具 举报

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 */' d( E  e; w8 x1 u# H9 L) ^1 a0 o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# D/ U& g& U6 L1 q* M8 c. j5 O3 j
var heapMemParams = new HeapMem.Params();
: {" W3 T! ~9 j/ c* v  ^, ]heapMemParams.size = 0x4000;! T+ U1 v5 U8 g/ V

% P$ J3 W7 @; V9 U5 b8 u' Cvar Memory = xdc.useModule('xdc.runtime.Memory');# p8 ~( R' G8 j- E) W
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 H4 O, I7 E' z) O& C/ c  ?: C

/ W( m- p5 o4 h& @& q# q3 ^$ g. r我大约calloc  每次共计大小为5K*16bits,
; k: U2 {( {* }% f6 e而默认配置才0x4000、需要改大。
$ B1 b7 w4 Z; z5 [) ?2 w2 C
: a" V! o0 ~9 l3 s9 ^: a; O
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */; g8 O8 V( T3 ]2 @" q8 G+ o4 l
Program.heap = 0;. `; T" Z* x% X( D& a" M& Q5 o: r
Program.argSize = 100;  /* minimum size */- L3 m) [/ P1 X1 ^+ n" [
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-14 01:33 , Processed in 0.042689 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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